sql优化
关于sql优化,面试中经常被问道,由于本人也是小白一枚,请大家对我宽容点下面是我整理的一些sql优化措施,不多说直接上干货:
1.查询语句中尽量不要使用*,具体到列名,即使是查询全部最好也要写出全部列名
2.模糊查询中除非必要,否则不要在关键词前加%
3.当你确定查询到的数据只有一条时,请在查询语句后面加上limit 1,因为MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。
4.对经常查询用到的列建立索引,但是不能对可以为空(null)列建立索引,即使对该列建立索引也不会提高性能
5.用EXISTS替代IN、用NOT EXISTS替代NOT IN
6.避免在索引列中使用is null 和is not null ,数据类型转换,计算操作
7.尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
8. 尽量多用commit语句提交事务,可以及时释放资源、解锁、释放日志空间、减少管理花费
9.除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替,因为表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临时表上的操作需要跨数据库通信,速度自然慢
10.除非必要,否则尽量少使用子查询,这样会降低查询效率
最后还有一些数据库的分库分表,还有主从备份,读写分离就不一一赘述了,当然主要原因还是我不会,有兴趣的同学可以上网上查询,如果我以后学了,可以写个简单的。数据库的sql优化肯定还有好多我没提到的,这里仅仅是面试时经常用的,希望对大家有帮助!