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

时间:2013-08-18 19:59:55

标签: php mysql

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

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

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

3 个答案:

答案 0 :(得分:0)

使用其中一个索引引擎,例如Sphinx,不要重新发明轮子。 Sphinx根据搜索/查询选项组织数据,它非常快,可以处理大量数据。如果您的数据库没有经常更改,您只需运行一次Sphinx Indexer。这个解决方案的一个缺点是,Sphinx索引文件非常大。

答案 1 :(得分:0)

阅读有助于您的this

您也可以使用this找到答案。

答案 2 :(得分:0)

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

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

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

编辑:

规范化会对性能产生好的和坏的影响。在减小数据大小的情况下,性能通常优于非规范化数据。如果你有适当的索引结构,那么规范化的数据结构通常可以很好地工作。