我正在尝试了解定义多列索引时更好的方法:
或许这取决于我是在优化速度还是空间?
答案 0 :(得分:9)
答案 1 :(得分:4)
总是把最具选择性的专栏放在一开始,很少有理由反过来。
或者可能取决于我是在优化速度还是空间?
让我这样说吧。如果导致索引not to be used at all
,那么使用较少存储的重点是什么?如果它不是查询的覆盖索引,则通常不会使用低基数索引(按列顺序),因为返回其他列的数据将非常昂贵。
索引的目的是协助查询并以正确的顺序(基数)将它们放在第一位也是最重要的考虑因素。
答案 2 :(得分:0)
WHERE person_id = 123 AND country_code = 'AT'
使用
INDEX(person_id, country_code) -- in EITHER order!
在这种情况下,索引列顺序的速度或空间没有 差异。
是的,MyISAM具有“索引压缩”功能,但是现在不再使用了。
基数仅在比较单独的索引时起作用,而对在复合索引中的列排序无关。也就是说,
INDEX(person_id) -- is better than
INDEX(country_code)
但是两者都不如综合索引。
对于
WHERE person_name LIKE 'James%' AND country_code = 'UK'
最好的索引是
INDEX(country_code, person_name) -- in THIS order!
WHERE
中的顺序对优化没有影响。