2

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

但是,在我对查询和索引进行了最佳优化之后,我的桌子上似乎还有很多。

我想出的减少索引的唯一真正解决方案是将一些信息(其中很多是重复的或相似的)存储在具有自己索引的不同表中。

我会有几个索引很少的表,而不是一个有多个索引的表。

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

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

以上两点不是“官方的”,我只是引用我过去学到的东西。

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


编辑:希望一个例子能帮助说明我的意思。

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

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

由于这个查询对每个用户都运行了很多,所以在user_id列上创建了一个索引,这使得这个查询闪电般快速。

用户还可以获得 5% 的推荐收入。Jack 是 Bob 的推荐人,因此他获得了 5% 的付款。

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

注意:由于多个用户可以是 Bob 的推荐人,我不能使用该user_id列。

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

将这个时间复制 10 次,您就会遇到这样的情况,即我需要开始创建新表,或者即使已经有很多索引,也需要继续创建新索引。

4

0 回答 0