MySQL 中的多列索引如何工作?
Posted
技术标签:
【中文标题】MySQL 中的多列索引如何工作?【英文标题】:How does a multi-column index work in MySQL? 【发布时间】:2022-01-02 20:52:21 【问题描述】:更具体地说,mysql 使用什么数据结构进行多列索引? 我知道 MYSQL 使用 Btree 进行索引,它只能索引一列。那么多列索引是如何工作的呢?
【问题讨论】:
Google 发现:(在前 10 个结果中)All About Indexes Part 2: MySQL Index Structure and Performance 我知道MYSQL使用Btree进行索引,只能索引一列。你的知识不正确。 BTree 只能索引一个表达式。而这个单一的表达式可能包括列、文字、运算符、确定性函数的复杂组合……唯一的要求是这个复杂的表达式必须给出标量值。 @Akina - 嗯,这也是“错误的”。看我的回答。 【参考方案1】:以这种方式考虑 MySQL“复合”索引。
将索引中的所有列连接在一起,然后在该“单个”字符串上构建 BTree 索引。
一些相关的cmets:
一旦您理解了这个类比,您就会明白为什么各个列的基数无关紧要。也就是说,复合索引中列的顺序与性能无关。顺序确实很重要,具体取决于查询要求的内容。
INDEX(a,b)
可能对这些有用:
WHERE a = 123
WHERE b = 5 AND a = 678
但不能用于
WHERE b = 5
(注意我使用“连接”。由于连接浮点数、日期、有符号整数、具有奇数排序规则的字符串等并不实际,就好像它们只是字节一样,我并不是说 InnoDB 从字面上连接字节在一起。)
【讨论】:
以上是关于MySQL 中的多列索引如何工作?的主要内容,如果未能解决你的问题,请参考以下文章