数据库索引优化建议

时间:2015-12-28 20:15:21

标签: mysql sql performance indexing

假设我有像(在MySQL上)的查询,

select xxx from table x
where col_a=yyy and col_b=zzz

假设我有一个col_a和col_b的组合索引。我的问题是这个组合索引如何比在col_a或col_b上使用单个索引更有帮助?我发布的组合索引是否会提升查询性能?想知道为什么?感谢。

的问候, 林

2 个答案:

答案 0 :(得分:3)

对于您提供的查询,以col_a, col_bcol_b, col_a开头的任何复合索引都与where子句匹配(假设yyyzzz为常数)。

这样的复合索引可用于直接查找给定行的值。我认为MySQL的documentation可以很好地解释适用于任何数据库的概念。

最佳索引还包括select列表中的列。这样的索引“覆盖”了查询,这意味着索引可以满足查询并且不需要访问原始数据页。

索引总是有帮助。例如,如果所有行在两列中具有相同的值,那么使用索引不会增加任何好处 - 甚至可能会减慢速度。

答案 1 :(得分:3)

是的,复合索引会有所帮助(除非其中一个谓词本身具有极高的选择性。)

考虑一个电话簿。

如果它只是由一个键LastName订购而在那些共享相同姓氏的人之间没有排序,那么在所有其他Smith中查找“Martin Smith”(WHERE FirstName='Martin' AND LastName='Smith')需要更长的时间查找由LastName,FirstName的复合键排序的目录。