关于SQL优化的一点建议
前段时间一直在做关于性能优化相关的工作,结合自己的实际工作经验,只针对SQL层面提一些优化的规范和建议。
针对SQL编写
1、单条SQL长度不宜超过100行;
2、SQL子查询不宜嵌套3层:
子查询嵌套过多,又可能会导致解析过于复杂,产生错误的执行计划;
3、SQL表关联需要考虑连接和限制条件的索引;
4、同一模块避免出现大量相似之处:
这种SQL写法一般比较可疑,一般可以优化,比如用with子句等;
5、尽量避免对列进行运算:
对列进行运算会导致索引失效,也会影响查询效率;
6、尽量批量提交;
7、尽量用数据量少的表作为驱动表,在表关联中,尽量使用小表关联大表。
索引相关
1、函数索引一般要尽量避免
2、位图索引在更新时是个噩梦,应谨慎使用
3、单表无索引时需要谨慎,但是索引数量也应控制
4、建联合索引时需要结合单列查询考虑,并考虑索引列的前后(详情参考前面的文章Oracle索引之Btree索引)
阻碍索引的情况
1、在索引列上使用not和<>
索引只能告诉我们什么存在于表中,不能告诉我们什么不存在表中。
2、在索引列上使用计算
包括‘||’,’+’但不限于这些字符串连接函数和数学函数,都会停用索引。
3、相同的索引列进行比较,会启用全表扫描。
4、当检索数据量超过30%表中的记录数,使用索引将没有显著的效率提高。
如果觉得我写的对你有帮助,欢迎关注我的公众号“代码狗go”支持一下呀。