php - MySQL数据库针对大量重复数据的优化

标签 php mysql

我正在 MySQL 中构建一个中等大小(100,000 个条目)的表,并且我正在尝试优化它的速度。这些条目包含一些本质上是事务性的数据,这些数据显然会保存在 MySQL 中。其余数据不会在表的生命周期内发生变化,也不太适合表格式(即某些条目将包含其他条目不会包含的字段,从而导致大量“空”值)。此外,第二部分中的大部分数据都会重复,这意味着可能只有 500-1000 个唯一数据集,然后与表中的条目进行配对。

我正在考虑三种组织数据的方法。 1)将MySQL中的所有数据保留为表格式。 2) 序列化非唯一数据并将该数据保存在单个 MySQL 字段中。 3)将非唯一数据序列化并保存到硬盘中的文件中,由MySQL表中的指针引用。

我的问题是您会推荐哪种格式,为什么?鉴于我将在数据库上运行许多查询,哪一个最快?

最佳答案

听起来您正在描述一个规范化的数据库。这是非常标准的。您将把“更大”的实体作为带有 id 的单个表。

对于更大量的数据,您将拥有对该 id 的引用,称为外键。这就是关系数据库设计的结构。 “关系”的部分含义是实体之间的关系。

如果您只有几十列,我不会担心某些行中的某些值为 NULL,而其他行中的其他值为 NULL。如果您有多种类型的实体,那么您也可以在数据结构中反射(reflect)这一点。

编辑:

标准化对性能既有好的影响,也有坏的影响。在减少数据大小的情况下,性能通常比非规范化数据更好。如果您有适当的索引结构,那么规范化的数据结构通常工作得很好。

关于php - MySQL数据库针对大量重复数据的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18303135/

相关文章:

php - 为什么这个 js-php 生成的位置引用在 IE8 中不起作用?

Python MySQLDB Insert 以变量为参数

mysql - SQL 查询多列 DISTINCT 在一列上

php - MySQL - 本地连接但能够远程连接时访问被拒绝

javascript - 带有 HTML 的登录表单 Mysqli php

php - 如何从mysql中的表中检索5个最高分的总和

PHP PDO DB 连接未知字符集

php - Symfony3.4 - POST_SUBMIT 事件的预填充字段

php - 无法使用 noczone php-sdk 发送 2 个通知

php - 无法在 CGridView 中为寻呼机设置 pageSize - Yii