选择合适的索引列顺序
正确的顺序依赖于使用该索引的查询语句,同时,还需要考虑如何更好地满足排序和分组操作的需要。
在一个多列 B-tree 索引中,索引列的顺序意味着索引首先按照最左列进行排序,其次是第二列,等等。所以索引可以按照升序或者降序进行扫描,以满足精确符合列顺序的 ORDER BY、GROUP BY 和 DISTINCT 等子句的查询需求。所以,多列索引的列顺序至关重要。
对于如何选择索引的列顺序有一个重要的经验法则:将选择性最高的列放到索引最前列。这个建议准确吗?在很多场景中可能有帮助,但是要全面地考虑各种场景的话,考虑如何避免大量随机 I/O 和排序可能更重要。
当不需要考虑排序和分组时,将选择性最高的列放在前面通常是很好的。这时索引的作用只是优化查询语句中的 WHERE 条件。在这种情况下,按这个原则设计的索引确实能够最快地过滤出需要的行,对于在 WHERE 子句中只使用了索引部分前缀列的查询来说,选择性也更高。
性能不只依赖于所有索引列的选择性(整体基数),也和查询条件的具体值有关,也就是和值的分布有关。可能需要根据那些运行频率最高的查询来调整索引列的顺序,让这种情况下索引的选择性最高。
最后更新于