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,