SQL语句运行超时(居然运行了8分钟) 50NetAnt007]

发布时间:2016-12-7 3:54:23 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"SQL语句运行超时(居然运行了8分钟) 50NetAnt007]",主要涉及到SQL语句运行超时(居然运行了8分钟) 50NetAnt007]方面的内容,对于SQL语句运行超时(居然运行了8分钟) 50NetAnt007]感兴趣的同学可以参考一下。

遇到一个奇怪的问题: select count(CVOC_ID) from  cvoc_mst a  WHERE REGIST_DATE between '2006-01-10' and '2006-01-24'and  (Channel=1) and  svoc_id in (  select svoc_id from cvoc_result_mst  where REGIST_DATE between '2006-01-10' and '2006-01-24' and catecode in('Root.不满')  group by svoc_id   ) 这个语句居然运行了8分钟没有出结果。 括号里面的语句 select svoc_id from cvoc_result_mst  where REGIST_DATE between '2006-01-10' and '2006-01-24' and catecode in('Root.不满')  group by svoc_id 只需要1秒中就可以出数据,数据条数是1556条,奇怪的是如果我把语句改成如下的(加一个top 2000),就可以出数据,不到3秒, select count(CVOC_ID) from  cvoc_mst a  WHERE REGIST_DATE between '2006-01-10' and '2006-01-24'and  (Channel=1) and  svoc_id in (  select top 2000 svoc_id from cvoc_result_mst  where REGIST_DATE between '2006-01-10' and '2006-01-24' and catecode in('Root.不满')  group by svoc_id   ) 求大侠帮忙。怎么回事儿啊。

查看一下执行计划,看看2个的执行计划有什么不同

第一个根本执行不了,我又执行了一次,12分钟没出结果,也看布道执行计划, 下面的语句写top 2000的和不写top 2000的计划没什么不同。

CREATE INDEX idx_cvoc_mst ON cvoc_mst (svoc_id) CREATE INDEX idx_cvoc_result_mst ON cvoc_result_mst (svoc_id)

我的索引是有的, 不是索引的问题,如果是索引的问题的话,2个语句都要超时,

顶起来,高手们帮忙啊, SQL高手们啊,来帮忙啊。

括号里面的语句中in改为=,group by也是多此一举,可去掉: select count(CVOC_ID)   from cvoc_mst a   WHERE REGIST_DATE between '2006-01-10' and '2006-01-24'and (Channel=1)     and svoc_id in (select svoc_id from cvoc_result_mst                     where REGIST_DATE between '2006-01-10' and '2006-01-24'                       and catecode='Root.不满')

楼上的,我的SVOC_ID是多条的,并且是重复的。 你的思路不对。

in,一条与多条有区别吗?加个group by只会降低执行效率

sql server好象有问题。

SELECT COUNT(a.CVOC_ID) FROM cvoc_mst a, cvoc_result_mst b WHERE a.svoc_id=b.svoc_id AND b.REGIST_DATE BETWEEN '2006-01-10' AND '2006-01-24' AND b.catecode='Root.不满' AND a.REGIST_DATE BETWEEN '2006-01-10' AND '2006-01-24' AND a.Channel=1

可惜不能看执行计划,这样的情况一般是因为SQLServer选择了不当的连接方式。 三种连接方式:循环嵌套,排序合并,哈希。 效率最低的是哈希连接,如果你的两个连接列都没有排序,而且SQLServer认为数据量比较大,它就会选择这种连接方式。 避免哈希连接可以用SQL提示,或者将两个连接列排序。

不行,我的数据量太大,所以才用的这种方式, 我的CVOC_MST表200多万,CVOC_Result_Mst500多万,我这么写是为了缩小范围,要不早就挂了。

有点线索了,但是还不是不行: 如下; 我把and catecode=('Root.不满')去掉的话,就可以出数据,而且很快,不到1秒。 大家在帮一下忙啊。 select count(CVOC_ID) from  cvoc_mst a  WHERE REGIST_DATE between '2006-01-10' and '2006-01-24'and  (Channel=1) and  svoc_id in (  select top 2000 svoc_id from cvoc_result_mst  where REGIST_DATE between '2006-01-10' and '2006-01-24' --and catecode in('Root.不满')    ) 为什么去掉就可以那,

顶起来啊。

In重复的多条 和 In一条 有区别吗?基本概念不清阿 还有,不要重复,使用select distinct, group更是多余 这个sql语句不是你自己写的吧?

我靠

select count(CVOC_ID) from  cvoc_mst a  where a.Channel=1 and a.regist_date between '2006-01-10' and '2006-01-24' and exists(select 1 from cvoc_result_mst where regist_date between '2006-01-10' and '2006-01-24' and catecode ='Root.不满' and svoc_id=a.svoc_id)

上一篇:我的机子是win2000,装sql server2005,有问题吗? 20CSDN]
下一篇:SQL SERVER 2005 没有查询分析器吗? 50zzroom]

相关文章

相关评论