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 从字面上看将字节连接在一起。)
更具体地说,MYSQL 使用什么数据结构进行多列索引? 我知道MYSQL使用Btree做索引,只能索引一列。那么多列索引是如何工作的?
以这种方式考虑 MySQL“复合”索引。
将索引中的所有列连接在一起,然后在该 'single' 字符串上构建 BTree 索引。
一些相关评论:
一旦你理解了这个类比,你就会明白为什么各个列的基数无关紧要。也就是说,复合索引中列的顺序并不重要性能。顺序 很重要,具体取决于查询的要求。
INDEX(a,b)
可能对这些有用:
WHERE a = 123
WHERE b = 5 AND a = 678
但不能用于
WHERE b = 5
(关于我使用“连接”的注意事项。由于将浮点数、日期、带符号整数、具有奇数排序规则的字符串等连接起来并不实际,就好像它们只是字节一样,我并不是说 InnoDB 从字面上看将字节连接在一起。)