假设我有像(在MySQL上)的查询,
select xxx from table x
where col_a=yyy and col_b=zzz
假设我有一个col_a和col_b的组合索引。我的问题是这个组合索引如何比在col_a或col_b上使用单个索引更有帮助?我发布的组合索引是否会提升查询性能?想知道为什么?感谢。
的问候, 林
答案 0 :(得分:3)
对于您提供的查询,以col_a, col_b
或col_b, col_a
开头的任何复合索引都与where
子句匹配(假设yyy
和zzz
为常数)。
这样的复合索引可用于直接查找给定行的值。我认为MySQL的documentation可以很好地解释适用于任何数据库的概念。
最佳索引还包括select
列表中的列。这样的索引“覆盖”了查询,这意味着索引可以满足查询并且不需要访问原始数据页。
索引总是有帮助。例如,如果所有行在两列中具有相同的值,那么使用索引不会增加任何好处 - 甚至可能会减慢速度。
答案 1 :(得分:3)
是的,复合索引会有所帮助(除非其中一个谓词本身具有极高的选择性。)
考虑一个电话簿。
如果它只是由一个键LastName
订购而在那些共享相同姓氏的人之间没有排序,那么在所有其他Smith中查找“Martin Smith”(WHERE FirstName='Martin' AND LastName='Smith'
)需要更长的时间查找由LastName,FirstName
的复合键排序的目录。