2013-08-18 86 views
0

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

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

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

+0

数据的例子会有很大的帮助。最重要的问题是:“你打算如何使用它?” –

+0

也许一个更简单的方法是,表中的每个条目都是更大类型对象的子类。我将存储MySQL中子类实例所特有的所有变量,因为我需要频繁搜索和更新这些变量。但是我还需要读取(而不是写入)对大类拥有的变量的访问。 –

+0

例如,我有对象A,B和C.条目1,2,3,4和5是A,B和C的实例,其中1-> A,2-> A,3-> B, 4→B和5→C。存储所有A实例共有的数据的最佳方式是什么? –

回答

0

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

对于更大量的数据,您可以参考id,称为外键。这是关系数据库设计的结构。 “关系”的部分含义是实体之间的关系。

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

编辑:

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

+0

是的,我的第一本能就是像这样对数据进行规范化处理,但恐怕这会使我的查询数量增加一倍(一次获取子类,一次获取主类),这会严重降低性能。 –

0

使用索引引擎之一,如Sphinx,不要重新发明车轮。 Sphinx根据搜索/查询选项组织数据,并且速度非常快,可以处理大量数据。如果您的数据库不经常更改,您只需运行一次Sphinx Indexer。这个解决方案的缺点之一就是,狮身人面像索引文件非常大。

0

阅读this这将帮助你。

你也可以使用this,你可以找到你的答案。