2008-10-16 220 views
2

目前我们有一个表格用于跟踪inivitations。我们有一个已编入索引的电子邮件字段,但我们也有三个可选密钥,用户可以在添加新记录电子邮件时指定这些密钥。我们不允许重复,因此我们必须查询电子邮件加可选键是否已存在。目前,只有在指定了密钥的情况下才会将密钥添加到选择语句中。正常情况下,只有电子邮件是指定的,并使用它的工作相当迅速的指数。当键被添加时性能下降。单个索引与多个字段索引

添加三个索引是否会影响其他操作的性能?密钥可能很少使用,我们不希望影响这种情况下的性能。

  • 电子邮件,key1的
  • 电子邮件,KEY1,KEY2
  • 电子邮件,KEY1,KEY2,KEY3

另一个想法是添加1个键。

  • 电子邮件,KEY1,KEY2,KEY3

然后一直使用在查找所有的3个按键(如键1 =的myKey和键2 IS NULL和KEY3是NULL)

另请参见

Exact duplicate post

+0

[Multiple Indexes vs Multi-Column Indexes]的可能重复(http://stackoverflow.com/questions/179085/multiple-indexes-vs-multi-column-indexes) – 2012-06-12 00:19:16

回答

3

就我个人而言,我会推荐这种方法。

尝试使用涵盖所有内容的单个索引的方法,如果我正确记得它将仍然执行良好,如果您只查询第一个包含的列。索引就绪后,运行索引顾问。

然后尝试其他路线并重复。

这实际上取决于您的数据。

我通常能够通过1覆盖索引,从最常用的键开始。

+0

这正是我所要做的。 – 2008-10-16 18:28:41

2

这取决于表的更新频率,以及如何索引是复杂的。如果你坚持创建索引,那么每次插入/更新/删除记录时,都必须修改每个索引以反映该信息。

如果你只放了三个索引,而且它们比较简单,那么你应该没有问题。

0

我可能是错的,但我相信,如果你添加:

  • 电子邮件,KEY1,KEY2,KEY3

为指标,如果您的查询使用大多数数据库将使用它“email”,“email/key1”,“email/key1/key2”等等,而不需要为缺少的字段指定Null值。

0

正如其他人所说的,当搜索a,a和b或a,b和c时,大多数数据库将使用索引“a,b,c”。而且他们通常每个表只使用一个索引。因此,添加“电子邮件,密钥1,密钥2,密钥3”可能是最好的。

这就是说,使用EXPLAIN来查明真正发生了什么。请检查以确定您的查询正在使用哪些索引(如果有)。每个数据库都有它的怪癖。