复杂sql优化步骤与技巧

     数据管理型系统,由于用户的要求或者系统设计要求,会出现大量表进行join,还要进行大量统计性数据查询展示,甚至数据权限控制等操作。最后会导致sql异常复杂,随着数据量增加,或者只是应用到生产环境(正式环境)就会出现系统反应慢,体验差的现象,这个时候不得不对这些,复杂的sql进行优化。没有经验的程序员会感觉无从下手,这么复杂的sql语句看一眼就头疼,该怎么办呢?

    根据个人的工作经验提供一下优化步骤:

首先要对sql语句进行格式化,使sql条理清晰,甚至分步骤添加注释,弄清楚每个步骤是为了得到什么;

第二步,用第一部格式化过的sql与最终需求做对比,没有用的表,就不要进行join了,没有用的字段也不要进行返回了。

第三步,分模块检查子查询,到底是哪个表查询速度慢,或者哪个条件导致的查询速度慢。

 

第四步,配合sql执行计划,这个由于自己也不擅长看执行计划,只能尽量避免全表扫描,提前限制sql数据筛选范围。

第五步,检查是否用了不合适的in查询,过量的in会导致效率骤然降低很多。

第六步,检查是否存在过多的or查询,or会导致全表扫描,能避免尽量避免。

第七步,检查子查询是否过于复杂,或者sql处理是否过于复杂,如果可以将复杂处理放到程序中进行。

 

第八步,可以用exists替代的地方,用exists进行替代。

第九步,可以建视图,对sql进行简化,至于视图是否可以提高查询效率,我也不知道,还需要学习研究。

 

以上步骤准确的说,是可以采取的方法,除了前几条,其他的没有先后顺序。

这些心得是在老大指导进行sql优化时的心得,记录下来既可以总结自己的收获,也希望能与大家的观点碰撞,相互进步!

 

-----------------------------------------

2018-05-08  更新

自己进行sql速度优化时的感悟心得。

建表时注意:

1,不要用判断值的方法,代替状态字段,建表时应该建状态字段,不能省略;

因为用判断某个字段的值判断状态,可能需要使用转换函数或者isNull判断,会影响查询速度。

2,应该在程序中保持数据的一致性,而不是使用sql,防止查询时可能需要or判断,or判断会影响sql查询速度;

3,严格控制字段的类型,不要使用过大的字段,或者不必要的增大字段长度;

 

posted on   荆棘人  阅读(5173)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示