SQL优化

周末闲来无事整理了一些笔记===============================

1、in操作符(优化方案:使用exists代替)
使用in的话,它会先有一个转换的过程,将其转换为多个表的连接,如果转换不成功,才会执行in里面的子查询,再查询外层的表,也就多了一个转换的过程
2、not in操作符(优化方案:使用not exists代替)
因为不能应用表的索引
3、is null(空)和is no null(非空)(优化方案:字段名>0或字段名>"")
因为null是不能作索引的,所以如果有哪个列出现null值,那么就算加上索引也无效果
4、>和>=(优化方案:用>=替换>)
因为如果在查询的时候,使用>号的话会去找这个记录索引,需要进行比较,而使用>=号,
则会直接找到这个记录索引,没有比较的过程
5、查询(优化方案:尽量需求字段进行查询)
6、like操作符(优化方案:尽量不要使用两个%)
因为使用两个%不会引用索引,而使用一个会引用索引
7、union(优化方案:使用union all替换union)
因为union会过滤重复数据和自动排序,而union all不会
8、使用truncate替代delete
因为使用truncate删除之后不能恢复(也能恢复,只是非常复杂),使用truncate不会记录日志,而delete会,使用drop也不会,使用truncate是将这个表的索引所占空间恢复到初始大小,并将数据清空,不会影响表结构
而drop table是将这个表的索引空间全部释放掉,索引性能上又优于truncate,而delete仅仅只是将记录删除,不会影响表结构,
truncate和drop都是DDL,会隐式提交,不能回滚,不会触发触发器
删除表用drop table
和事务无关,只想删除数据保留表用truncate
和事务有关,想删除指定数据,想触发trigger触发器,用delete
9、尽量多使用commit
因为commit会释放资源(例如:1、回滚段上用于恢复数据的信息 2、被程序语句获得的锁 3、redo log buffer中的空间)
10、用where子句替换having子句
因为使用having子句处理的时候需要先排序、总计等操作,而where是在计算之前就完成的
11、多表联查的时候使用别名

因为可以减少解析的时间并减少由字段歧义引起的语法错误

最后说一点最基础也最容易忽略的,尽量使用大写

你可能感兴趣的:(SQL优化,数据库)