Hash索引 | B+tree索引 |
等值查询速度慢 | 等值查询速度快 |
无法范围查询(经过hash不在连续) | 可以范围查询(叶子结点有序链表) |
无法模糊查询 | 可以进行模糊查询(最左前缀匹配原则) |
数据库无法用所以避免排序 | 数据库可以用所以避免排序 |
不支持多列联合索引 | 支持多列联合索引 |
大量重复键产生Hash冲突 | 性能稳定 |
最左前缀匹配原则
MySQL 建立联合索引,它会首先根据联合索引中最左边的、也就是第一个字段进行排序,在第一个字段排序的基础上,再对联合索引中后面的第二个字段进行排序,依此类推。
因此,第一个字段是绝对有序的,从第二个字段开始是无序的,这就解释了为什么直接使用第二字段进行条件判断用不到索引了(从第二个字段开始,无序,无法走 B+ Tree 索引)。