楼主: 王楠w_n

【大话IT】不得不说的事!SQL语句优化大盘点

[复制链接]
论坛徽章:
111
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:03马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-03-20 10:09:22马上有钱
日期:2014-03-20 15:53:11马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11马上有对象
日期:2014-03-20 16:14:11马上加薪
日期:2014-03-20 16:14:11技术图书徽章
日期:2014-03-27 09:30:56
31#
发表于 2017-1-26 14:04 | 只看该作者




1.您一般在写SQL时需要注意哪些问题,可以提高查询的效率?

  •   where子句连接顺序,DB2采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.表存在分区时,分区在条件使用中排在第一位,概率最大的条件放在最后。
  •   select 子句中避免使用 “*”  说明:当想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*' 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,DB2在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。
  •   减少关联表的数量,不必要的维表先不要关联
  •   尽量多使用commit;提交



2.请分享一次印象深刻的SQL优化:除了SQL改写,还要考虑什么?
假设有TAB1、TAB2两个表,其中TAB1表数据量较小,而TAB2表数据量很大,适用exists 。
     若TAB2表数据量较小,而TAB1表数据量很大,适用in 。



3.如何查看到效率低的SQL?
  使用执行计划进行查看,确认那一步骤最耗时间,然后再进行优化。


4.请简要总结下,您的SQL语句优化技巧(至少写3点)

  • 尽量多使用COMMIT
  • in、exists使用规范
  • 避免不必要的排序
  • 用Where子句替换HAVING子句
  • 用UNION-ALL 替换UNION ( 如果有可能的话)
  • 尽量使用DB2的内建函数。如:replace,substr,instr等等



使用道具 举报

回复
论坛徽章:
111
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:03马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-03-20 10:09:22马上有钱
日期:2014-03-20 15:53:11马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11马上有对象
日期:2014-03-20 16:14:11马上加薪
日期:2014-03-20 16:14:11技术图书徽章
日期:2014-03-27 09:30:56
32#
发表于 2017-1-26 14:06 | 只看该作者
说明一下:  不是我多次发帖,是因为发帖报错,以为没有成功,报特殊字符,不能发帖。  请楠楠同学知晓,不好意思。

好像我又不能把多发的几个回复去掉......

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2013-12-18 09:29:10
33#
发表于 2017-1-31 16:28 | 只看该作者
1.您一般在写SQL时需要注意哪些问题,可以提高查询的效率?
  相信客户写的sql 都是对的
  用dbms.xplan 包 查看哪个是消耗的重点
  看看sql的 哪个部分 导致了 sql transformation 不合理
2.请分享一次印象深刻的SQL优化:除了SQL改写,还要考虑什么?
  sql 大部分都是转化出问题 导致执行计划 效率不高
3.如何查看到效率低的SQL?
  awr + ash
4.请简要总结下,您的SQL语句优化技巧(至少写3点)
  需要重写的话 分析sql 写出同等结果的 不同写法
  需要对 oracle 的 sql transformation 掌握熟练
  

使用道具 举报

回复
论坛徽章:
91
秀才
日期:2015-11-02 11:24:03秀才
日期:2017-12-12 10:00:50秀才
日期:2017-09-18 17:34:47秀才
日期:2017-09-18 17:02:592017金鸡报晓
日期:2017-02-08 14:09:132017金鸡报晓
日期:2017-01-10 15:39:05秀才
日期:2016-12-21 16:55:07ITPUB15周年纪念
日期:2016-10-06 10:54:102016猴年福章
日期:2016-02-23 09:58:342016猴年福章
日期:2016-02-18 09:31:30
34#
发表于 2017-2-4 00:47 | 只看该作者
1.您一般在写SQL时需要注意哪些问题,可以提高查询的效率?
分区表要注意隐示转换而造成不走分区,比如int型分区,如果使用'20180204'这种就不走分区了;
关联时以大表为驱动表,适当使用子查询
注意索引条件确保使用
注意合理使用(not)Exists和(not) in关键字
2.请分享一次印象深刻的SQL优化:除了SQL改写,还要考虑什么?
一个多表关联查询,使用with as效果提升明显
业务需求是否有这么复杂的必要,是否可以提升为固定的汇总表
3.如何查看到效率低的SQL?
查看执行计划是否合理,是否使用到分区,索引等关键

4.请简要总结下,您的SQL语句优化技巧(至少写3点)
合理设计索引、分区
理解业务需求
有in的可以考虑用exists改写
固定需求做好汇总
关联注意顺序、条件尽可能缩小主表数据、防止笛卡尔积

使用道具 举报

回复
论坛徽章:
111
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:03马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-03-20 10:09:22马上有钱
日期:2014-03-20 15:53:11马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11马上有对象
日期:2014-03-20 16:14:11马上加薪
日期:2014-03-20 16:14:11技术图书徽章
日期:2014-03-27 09:30:56
35#
发表于 2017-2-4 06:34 | 只看该作者
新的一天,新的开始,祝各位顺利,鸡年大吉

使用道具 举报

回复
论坛徽章:
0
36#
发表于 2017-2-4 07:34 | 只看该作者
学习学习

使用道具 举报

回复
论坛徽章:
28
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442014年新春福章
日期:2014-02-23 23:08:492014年世界杯参赛球队: 葡萄牙
日期:2014-08-05 11:31:14马上有对象
日期:2014-11-21 22:36:46暖羊羊
日期:2015-03-04 14:50:372015年新春福章
日期:2015-03-06 11:57:31秀才
日期:2016-03-24 09:10:24秀才
日期:2016-03-24 09:20:52秀才
日期:2016-04-21 14:08:53秀才
日期:2016-06-23 14:15:06
37#
发表于 2017-2-6 17:13 | 只看该作者
学习学习的

使用道具 举报

回复
论坛徽章:
0
38#
发表于 2017-2-6 18:01 | 只看该作者
1.您一般在写SQL时需要注意哪些问题,可以提高查询的效率?
避免大表的重复访问

2.请分享一次印象深刻的SQL优化:除了SQL改写,还要考虑什么?
表或业务模型设计的不合理

3.如何查看到效率低的SQL?
AWR等报告

4.请简要总结下,您的SQL语句优化技巧(至少写3点)
1. 使用WITH替代数据的重复访问
2. 逻辑复杂可使用匿名块拆分处理
3. 参考SQL Profile优化

使用道具 举报

回复
论坛徽章:
9
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47技术图书徽章
日期:2017-02-09 17:05:19秀才
日期:2017-02-22 15:16:26秀才
日期:2017-02-22 15:18:00现任管理团队成员
日期:2017-06-03 02:10:11版主1段
日期:2017-06-05 09:06:08秀才
日期:2017-08-18 11:04:35秀才
日期:2017-09-18 17:02:49
39#
发表于 2017-2-8 09:42 | 只看该作者

1.您一般在写SQL时需要注意哪些问题,可以提高查询的效率?
避免太多的表JOIN在一起
避免隐世转换
筛选的列不要进行函数运算

2.请分享一次印象深刻的SQL优化:除了SQL改写,还要考虑什么?
在某一天,早上9点多,客户联系我说,系统卡的动不了了 ,系统使用人数多,超过5000 人,并发高,CPU使用率持续在100%。
通过查看运行中的语句。找到开销最大,且执行非常频繁的语句进行分析。最后通过调整索引解决。CPU 马上下降到10%。

还要考虑什么
服务器配置参数
索引的类型



3.如何查看到效率低的SQL?
专家云工具
profiler
DMV

4.请简要总结下,您的SQL语句优化技巧(至少写3点)
1.建立合适的索引
2.拆分复杂的语句
3.union 代替 or


使用道具 举报

回复
论坛徽章:
27
狮子座
日期:2015-11-13 11:39:31海蓝宝石
日期:2017-04-06 13:47:50祖母绿
日期:2017-04-06 13:48:00萤石
日期:2017-04-06 13:48:10蓝锆石
日期:2017-04-06 13:48:19秀才
日期:2017-04-06 18:09:28秀才
日期:2017-05-09 11:37:55秀才
日期:2017-07-11 13:54:02秀才
日期:2017-07-11 14:19:35秀才
日期:2017-08-18 11:04:35
40#
发表于 2017-2-13 11:07 | 只看该作者
结果呢

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表