添加更多索引或添加更多表是否更好?

时间:2013-03-12 02:09:22

标签: mysql sql database-design

这个问题已经在我脑海中浮现了很长一段时间。我有一个读取很重的数据库,一个特定的表在几乎每列都有一个索引。这些索引并不浪费,我已尽最大努力调整查询以使用现有索引,以便不需要新索引。

但是,在我最好的查询和索引优化之后,我似乎在我的桌子上有很多它们。

我提出的减少索引的唯一真正解决方案是在不同的表中使用自己的索引存储一些信息(其中很多都是重复的或类似的)。

我会使用少数索引几个表,而不是带有多个索引的一个

问题是,我学到的两个mysql实践是冲突的:

  • 您永远不应该在多个表中存储重复信息。仅存储一次数据时,数据清晰有效。
  • 您的表格的每一列都不应该有索引。这实际上会减慢查询速度,因为mysql引擎必须检查每个索引以查看它是否可以使用。

上面的两个项目不是“官方的”,我只是引用我过去学到的东西。

那么哪种“最佳实践”是“更好”的做法?哪个更重要?


编辑:希望一个例子可以帮助表明我的意思。

假设我有两个用户Bob(user_id 10)和jack(user_id 5)。用户想知道他们从支付表中“赚取了多少”。

对于Bob:SELECT SUM(amount) FROM payments WHERE user_id=10

由于此查询对每个用户都运行了很多,因此会在user_id列上生成一个索引,这会使此查询快速闪烁。

用户也可获得5%的推荐收入。杰克是鲍勃的推荐人,所以他获得了5%的报酬。

Bob的推荐收入:SELECT (SUM(amount)*.05) FROM payments WHERE referral_id=10

注意:由于多个用户可以成为Bob的推介,因此我无法使用user_id列。

所以,我有两个选择:我可以在referral_id上添加另一个索引或者我可以创建另一个表“referral_payments”来存储具有类似信息的另一行。该表将在referral_id.

上有一个索引

重复此次10,你有一种情况我需要开始制作新表,或者只是不断制作新的索引,即使已经有很多。

0 个答案:

没有答案