教你写出高质量SQL(实践必备)

1、查询SQL尽量不要使用select * ,而是select具体字段。

//反例子
select * from sys_user;
//正例子
select id,name from sys_user;

理由:

只取需要的字段,节省资源、减少网络开销;select * 进行查询时,很可能就不会使用到覆盖索引,就会造成回表查询;

覆盖索引:只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。
例如:

回表查询:先通过普通索引的值定位聚簇索引值,再通过聚簇索引的值定位行记录数据,需要扫描两次索引B+树,它的性能较扫一遍索引树更低。

2、如果知道查询结果只有一条或者只要最大/最小一条记录,建议用limit1

假设现在有sys_user用户表,要找出一个手机号码为18811112299的人;

//反例
select id,name from sys_user where mobile = '18811112299'
//正例
select id,name from sys_user where mobile = '18811112299' limit 1

理由:

  • 加上limit1后,只要找到对应的一条记录,就不会继续向下扫描了,不用全表扫面效率会大大提升;
  • 当然如果mobile是唯一索引的话,是没必要加limit1,

猜你喜欢

转载自blog.csdn.net/weixin_40205234/article/details/124668408