星空网 > 软件开发 > 数据库

利用查询提示优化SQL

数据库环境:SQL SERVER 2005

我们来看一下SQL语句及对应的数据量

SELECT COUNT(*)FROM  cinvout_02 aWHERE  ( a.dept_id IN ( SELECT RTRIM(dept_id)             FROM  ctlm2320             WHERE user1_id = '000008'                AND zone_id = '' )     OR a.dept_id = ''     OR ( a.dept_id IN ( SELECT  RTRIM(b.dept_id)               FROM   ctlm2320 a ,                    ctlm1003 b               WHERE   a.zone_id = b.zone_id                    AND a.user1_id = '000008'                    AND a.zone_id <> '' ) )    )    AND a.out_time >= '2014-07-01'    AND a.out_time <= '2014-07-12'    AND a.sts_flag = 'S'

---------------------数据量------------------------- SELECT COUNT(*)FROM cinvout_02 aWHERE a.out_time >= '2014-07-01' AND a.out_time <= '2014-07-12' AND a.sts_flag = 'S'--214555 SELECT COUNT(*)FROM ctlm2320WHERE user1_id = '000008' AND zone_id = ''--0 SELECT COUNT(*)FROM ctlm2320 a , ctlm1003 bWHERE a.zone_id = b.zone_id AND a.user1_id = '000008' AND a.zone_id <> ''--3768

数据量不是很大,cinvout_02也走了索引查找,而且返回的数据才有214317行。按理说应该不会太慢,

可是,真实情况是,整条SQL要跑4分多钟才全部出结果。

光靠猜是得不出答案的,我们通过执行计划来分析为什么会出现这种情况。

利用查询提示优化SQL

看一下圈红的地方,2张表/结果集关联走的是Nested Loops,且结果集相对较大,因此,这地方应该走hash join。

直接在SQL后面加上提示option(hash join)即可。

强制走hash join后,执行计划直接开并行,并将2个结果集并行。

利用查询提示优化SQL

好了,我们对比一下加查询提示前后SQL的耗时。

原来SQL耗时

利用查询提示优化SQL
加了查询提示后的SQL耗时
利用查询提示优化SQL
嗖的一下,就出结果了。
(本文完)

 




原标题:利用查询提示优化SQL

关键词:sql

sql
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流