单个索引与多个字段索引
Posted
技术标签:
【中文标题】单个索引与多个字段索引【英文标题】:Individual indexes vs multiple field indexes 【发布时间】:2010-09-17 14:30:32 【问题描述】:目前我们有一个用于跟踪邀请的表格。我们有一个已编入索引的电子邮件字段,但我们还有三个可选键,用户可以在添加新记录电子邮件时指定它们。我们不允许重复,因此我们必须查询电子邮件和可选键是否已经存在。目前,只有指定了键,才会将键添加到 select 语句中。正常情况是仅指定电子邮件并使用索引它工作得相当快。添加键时性能下降。
添加三个索引会影响其他操作的性能吗?密钥可能不经常使用,我们不想影响这种情况下的性能。
电子邮件,key1 电子邮件,key1,key2 电子邮件、key1、key2、key3另一个想法是我们添加 1 个键。
电子邮件、key1、key2、key3然后始终在查找中使用所有 3 个键(例如 key1 = mykey AND key2 为 NULL AND key3 为 NULL)
另见
Exact duplicate post
【问题讨论】:
Multiple Indexes vs Multi-Column Indexes的可能重复 【参考方案1】:我个人会推荐这种方法。
尝试使用涵盖所有内容的单个索引的方法,如果我没记错的话,如果您只查询包含的第一个列,它仍然会表现良好。建立索引后,运行 Index Advisor。
然后尝试另一条路线并重复。
这真的取决于你的数据。
我通常能够使用 1 个覆盖索引,首先从最常用的键开始。
【讨论】:
这正是我会做的。【参考方案2】:这取决于表的更新频率以及索引的复杂程度。如果您疯狂地创建索引,那么每次插入/更新/删除记录时,都必须修改每个索引以反映该信息。
如果你只放三个索引,而且比较简单,那应该没问题。
【讨论】:
【参考方案3】:我可能是错的,但我相信如果你补充:
电子邮件,key1,key2,key3作为索引,如果您的查询使用“email”、“email/key1”、“email/key1/key2”等,大多数数据库都会使用它...而不需要您为缺失的值指定 Null 值字段。
【讨论】:
【参考方案4】:正如其他人所说,大多数数据库在仅搜索 a、a 和 b 或 a、b 和 c 时会使用索引“a、b、c”。而且他们通常每张表只使用一个索引。所以添加“email, key1, key2, key3”可能是最好的。
也就是说,使用 EXPLAIN 来找出真正发生的事情。检查以确保您的查询正在使用哪些索引(如果有)。每个数据库都有其怪癖。
【讨论】:
以上是关于单个索引与多个字段索引的主要内容,如果未能解决你的问题,请参考以下文章