关于SQL优化的一点建议

时间:2024-03-23 13:36:38

前段时间一直在做关于性能优化相关的工作,结合自己的实际工作经验,只针对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”支持一下呀。