以下针对数据库存储引擎为InnoDB来说,假设针对字段a、b、c建立联合索引。
1、为什么索引支持最左索引前缀原则,构建了几个B+树?
只有一个B+树,这个B+树的非叶子节点按 a、b、c值顺序构造,叶子节点包括索引项和主键的记录。如果进行 select a,b,c from table 查询是不用进行回表,直接可以从索引表中获得结果。
2、使用联合索引时需注意设置的索引是否被正确使用上,举例说明:
- 全值匹配时,用到了索引,where子句几个搜索条件顺序调换时也会用到索引,因为Mysql中有查询优化器,会自动优化查询顺序
select * from table_name where a ='' and b='' and c=''; //走索引查询 select * from table_name where b='' and a ='' and c=''; //索引查询
- 部分值匹配时,只要条件中有最左索引项就会用到索引
select * from table_name where a ='' and b=''; //走索引查询 select * from table_name where a ='' and c=''; //走索引查询
- 条件中没有最左索引,不会用到索引,全表扫描
select * from table_name where b='' and c=''; //全表扫描
- 匹