目前,我们有一张表用于跟踪发件。我们有一个已编制索引的电子邮件字段,但我们还有三个可选密钥,用户在添加新记录电子邮件时可以指定这些密钥。我们不允许重复,因此我们必须查询电子邮件和可选密钥是否已存在。目前,如果指定了键,则仅将键添加到select语句中。正常情况下只指定了电子邮件,使用索引可以很快地运行。当键添加了性能下降。
添加三个索引是否会影响其他操作的性能?键可能很少使用,我们不希望影响这种情况下的性能。
另一个想法是我们添加1个密钥。
然后总是在查找中使用所有3个键(例如,key1 = mykey,key2为NULL,key3为NULL)
另见
答案 0 :(得分:3)
我个人会推荐这种方法。
尝试使用涵盖所有内容的单个索引的方法,如果我没记错的话,如果只查询第一个包含的列,它仍然会表现良好。准备好索引后,运行Index Advisor。
然后尝试其他路线并重复。
这实际上取决于您的数据。
我通常能够使用1覆盖索引,首先从最常用的密钥开始。
答案 1 :(得分:2)
这取决于表的更新频率以及索引的复杂程度。如果您坚持创建索引,那么每次插入/更新/删除记录时,都必须修改每个索引以反映该信息。
如果您只打开三个索引,并且它们相对简单,那么您应该没有问题。
答案 2 :(得分:0)
我可能错了,但我相信如果你补充:
作为索引,如果您的查询使用“email”,“email / key1”,“email / key1 / key2”等,大多数数据库都会使用它,而不要求您为缺失值指定Null值字段。
答案 3 :(得分:0)
正如其他人所说,大多数数据库在搜索a,a和b或a,b和c时都会使用索引“a,b,c”。而且他们通常每个表只使用一个索引。因此添加“email,key1,key2,key3”可能是最好的。
那就是说,使用EXPLAIN来找出真正发生的事情。检查以确定您的查询使用的索引(如果有)。每个数据库都有它的怪癖。