sql优化:为什么通常选用根据id查询而不是根据name?

先来看一个最常见的问题,下面两个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下面的行

sql优化:为什么通常选用根据id查询而不是根据name?_第1张图片

 

效率肯定慢于直接查找id

什么是回表查找,可以查看这一篇: 深入了解数据库的索引分类以及回表查询原理_ADRU的博客-CSDN博客

 

你可能感兴趣的:(mysql,sql,数据库,mysql)