先来看一个最常见的问题,下面两个sql语句哪个效率更高一些?
select * from user where id = 1;
select * from user where name ='张三'
在没有给name加索引的时候,id是有主键索引的,也就是聚集索引,这样就是一个B+Tree结构,很快就会定位到id,而name则是一行一行进行遍历
给name加上索引以后,就会产生一个二级索引,这样就会出现回表查找,它会先在name的B+Tree结构中查找到张三这个字段,接着想要全部的数据的话,还要根据张三对应的id进行查找id所在的B+Tree结构找到对应的id下面的行
效率肯定慢于直接查找id
什么是回表查找,可以查看这一篇: 深入了解数据库的索引分类以及回表查询原理_ADRU的博客-CSDN博客