MySQL 中的多列索引如何工作?

How does a multi-column index work in MySQL?

更具体地说,MYSQL 使用什么数据结构进行多列索引? 我知道MYSQL使用Btree做索引,只能索引一列。那么多列索引是如何工作的?

以这种方式考虑 MySQL“复合”索引。

将索引中的所有列连接在一起,然后在该 'single' 字符串上构建 BTree 索引。

一些相关评论:

一旦你理解了这个类比,你就会明白为什么各个列的基数无关紧要。也就是说,复合索引中列的顺序并不重要性能。顺序 很重要,具体取决于查询的要求。

INDEX(a,b) 可能对这些有用:

 WHERE a = 123
 WHERE b = 5 AND a = 678

但不能用于

 WHERE b = 5

(关于我使用“连接”的注意事项。由于将浮点数、日期、带符号整数、具有奇数排序规则的字符串等连接起来并不实际,就好像它们只是字节一样,我并不是说 InnoDB 从字面上看将字节连接在一起。)