楼主: wangyuzhen

[精华] 哪个sql好,为什么?

[复制链接]
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
11#
 楼主| 发表于 2004-3-1 11:54 | 只看该作者

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
12#
 楼主| 发表于 2004-3-1 17:40 | 只看该作者
各位给点意见啦

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
13#
发表于 2004-3-1 20:06 | 只看该作者
最初由 wangyuzhen 发布
[B]各位给点意见啦 [/B]


哈哈,咱没研究过这个东西

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
14#
 楼主| 发表于 2004-3-2 15:52 | 只看该作者
我是这么理解这2个SQL的执行过程的:
SQL1是先通过inner join找出所有匹配的行(有个笛卡儿乘积过程),然后再做GROUP BY工作,由于内连接是通过PK进行关联的,因此2个表都能用到索引来扫描表。
SQL2是对作为a表的T1进行基于索引的扫描,每扫描一条记录是由于存在子查询,所以还要到子查询中去对T1表进行进一步的扫描,扫描的范围是id号小于等于a表id号的记录,把这些记录的zl字段进行累计。然后接着扫描a表的下一条记录。

经过不断的测试(a.id=6000、10000、15000、20000、25000、30000),
记录范围|6000、10000、15000、20000、25000、30000
----|----------------------
SQL1:-| 01:42、03:40、08:18、07:40、11:47、超过25分钟被我中断
SQL2:-| 00:35、01:31、03:26、06:13、09:37、13:40
----------------------------时间:分:秒(mm:ss)
事实证明SQL2的性能的确要高于SQL1,那么究竟是什么环节让SQL1的性能如此差
我分别查看2个SQL的执行计划图,发现以下几处区别:
1、看到最大的区别就在Nested Loops操作上,SQL1涉及的行在记录范围为30000的时候竟然达到了449M行也就是4亿多行,真是个天文数字,不慢才怪呢。
2、SQL2对表的检索都是扫描非聚集索引中的特定范围的行,使用了Index Seek,估计涉及29999行记录;而SQL1对表的检索是扫描聚集索引,使用的是Index Sacan,估计涉及99354行记录。
3、SQL1在做Hash Match/Partial Aggregate操作的时候估计涉及的行是12万行记录,并且在接下来的Parallelism操作中涉及的行数依然是12万;而SQL2在Compute Scalar、Stream Aggregate等操作中涉及的行数最多也就是29999。
从以上3点看,SQL2的执行效率高于SQL2也是在情理之中的。

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
15#
 楼主| 发表于 2004-3-2 16:06 | 只看该作者
SQL1详细执行计划图1:

sql11.jpg (18.72 KB, 下载次数: 181)

sql11.jpg

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
16#
 楼主| 发表于 2004-3-2 16:08 | 只看该作者
SQL1详细执行计划图2:

sql12.jpg (17.86 KB, 下载次数: 81)

sql12.jpg

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
17#
 楼主| 发表于 2004-3-2 16:10 | 只看该作者
SQL1详细执行计划图3:

sql13.jpg (22.71 KB, 下载次数: 70)

sql13.jpg

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
18#
 楼主| 发表于 2004-3-2 16:12 | 只看该作者
SQL2详细执行计划图1:

sql21.jpg (17.38 KB, 下载次数: 70)

sql21.jpg

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
19#
 楼主| 发表于 2004-3-2 16:29 | 只看该作者
SQL2的详细执行计划图2:

sql22.jpg (16.1 KB, 下载次数: 71)

sql22.jpg

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
20#
发表于 2004-3-2 19:53 | 只看该作者
请解释解释

使用道具 举报

回复

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

本版积分规则 发表回复

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