有关查询语句开销超出了配置的阈值

z184931481 2010-10-11 09:41:41
环境WINDOWS 2003+ SQL 2005
SQL 语句
SELECT distinct ISNull(e.FNumber,'') AS FShopNumber,ISNull(e.FName,'') AS FShopName,S.FBillNo,S.FDate,sum(SE.famount) famount,e.FSendDay,
DateDiff(day,DateAdd(day,FSendDay,S.FCheckDate),GetDate()) AS FDiffDay
From
SEOutStock S Inner Join SEOutStockEntry SE On S.FInterID=SE.FInterID
Left Join t_Emp e On S.FEMPID=e.FItemID
WHERE
S.FDate>='2008-01-01' and s.FTrantype=83
AND S.FBillNo Not In (Select FBillNO_Src From t_ItemCheckentry)
AND (''='' Or e.FNumber<='') AND (''='' Or e.FNumber>='')
AND (''='' OR S.FBillNo>='') AND (''='' OR S.FBillNo<='')
AND ('2010-08-31'='' OR S.FDate<='2010-08-31')
group by s.fbillno,s.fdate,e.FNumber,e.FName,e.fsendday,S.FCheckDate
ORDER BY FDiffDay

错误类型
服务器: 消息 8649,级别 17,状态 1,行 1
查询已取消,因为此查询的估计开销(319)超出了配置的阈值 300。请与系统管理员联系。


急求解决办法,在线等
...全文
1033 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-10-11
  • 打赏
  • 举报
回复
----select部分基本没什么优化的
SELECT distinct ISNull(e.FNumber,'') AS FShopNumber,
ISNull(e.FName,'') AS FShopName,S.FBillNo,S.FDate,
sum(SE.famount) famount,e.FSendDay,
DateDiff(day,DateAdd(day,FSendDay,S.FCheckDate),GetDate()) AS FDiffDay
From SEOutStock S -----JOIN部分,还是检查下index问题
Inner Join SEOutStockEntry SE
On S.FInterID=SE.FInterID
Left Join t_Emp e On S.FEMPID=e.FItemID
WHERE
----where条件部分逻辑看上去不是很清晰,如S.FDate>='2008-01-01',你下面又有AND ('2010-08-31'='' OR S.FDate<='2010-08-31')出现,还有AND (''='' Or e.FNumber<='') AND (''='' Or e.FNumber>='')这两个可以整合到一起去。
S.FDate>='2008-01-01' and s.FTrantype=83
AND S.FBillNo Not In (Select FBillNO_Src From t_ItemCheckentry)
AND (''='' Or e.FNumber<='') AND (''='' Or e.FNumber>='')
AND (''='' OR S.FBillNo>='') AND (''='' OR S.FBillNo<='')
AND ('2010-08-31'='' OR S.FDate<='2010-08-31')
group by s.fbillno,s.fdate,e.FNumber,e.FName,e.fsendday,S.FCheckDate
ORDER BY FDiffDay
SQLCenter 2010-10-11
  • 打赏
  • 举报
回复
先优化这里了,看这个形式,应该是动态SQL串接出来的结果,参数=''就不加条件,有值才加:

AND (''='' Or e.FNumber<='') AND (''='' Or e.FNumber>='')
AND (''='' OR S.FBillNo>='') AND (''='' OR S.FBillNo<='')
AND ('2010-08-31'='' OR S.FDate<='2010-08-31')
「已注销」 2010-10-11
  • 打赏
  • 举报
回复
好了,不要再精辟了,帮人解决问题吧。
LZ先优化SQL试试看,能不能解决你的问题。
z184931481 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 sqlcenter 的回复:]
一根稻草压垮骆驼,那根稻草是导火线,之前骆驼已经处于垮的临界状态
[/Quote]

精辟
「已注销」 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 sqlcenter 的回复:]

一根稻草压垮骆驼,那根稻草是导火线,之前骆驼已经处于垮的临界状态
[/Quote]
哇塞,你什么时候变身哲学家了
winstonbonaparte 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 sqlcenter 的回复:]

一根稻草压垮骆驼,那根稻草是导火线,之前骆驼已经处于垮的临界状态
[/Quote]
太太太。。。。精僻了。。。。
SQLCenter 2010-10-11
  • 打赏
  • 举报
回复
一根稻草压垮骆驼,那根稻草是导火线,之前骆驼已经处于垮的临界状态
「已注销」 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 z184931481 的回复:]

如何优化DISTINCT这条语句
[/Quote]
DISTINCT是你业务逻辑,有什么优化的。
「已注销」 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 z184931481 的回复:]

不是索引的问题,是不是DISTINCT带来的问题
[/Quote]
为什么不会是index的问题,如果有表扫描的地方,你串接了三张表,你的性能会好么?
z184931481 2010-10-11
  • 打赏
  • 举报
回复
如何优化DISTINCT这条语句
z184931481 2010-10-11
  • 打赏
  • 举报
回复
不是索引的问题,是不是DISTINCT带来的问题
hovy_yang 2010-10-11
  • 打赏
  • 举报
回复
学习了
「已注销」 2010-10-11
  • 打赏
  • 举报
回复
先选中这段sql,ctrl + L,看看执行计划,看看有没有table scan的地方,如果有请加上相关index
z184931481 2010-10-11
  • 打赏
  • 举报
回复
这段查询语句怎么优化呢
「已注销」 2010-10-11
  • 打赏
  • 举报
回复
“查询开销”是指在特定硬件配置中完成查询所需的估计占用时间(秒)

你的查询语句需要进一步优化,可以通过优化解决不了,只能更改开销时间上限值。
z184931481 2010-10-11
  • 打赏
  • 举报
回复
我想问的是,语句为什么超过限定的开销,是语句执行效率问题,还是什么
「已注销」 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 z184931481 的回复:]

除了重新配置阈值,还有其他办法没
旁加问题,为什么2000下可以而2005规则下不行,是不是对应补丁问题
[/Quote]
看看5#的链接,微软的建议解决方案-----将QUERY_GOVERNOR_COST_LIMIT 选项设置为更大的值
「已注销」 2010-10-11
  • 打赏
  • 举报
回复
http://technet.microsoft.com/zh-cn/library/aa337374.aspx

解释

查询已取消,因为此查询的估计开销超出了为 QUERY_GOVERNOR_COST_LIMIT 设置的配置阈值。
用户操作

将 QUERY_GOVERNOR_COST_LIMIT 选项设置为更大的值。
请参阅
其他资源
SET QUERY_GOVERNOR_COST_LIMIT (Transact-SQL)
「已注销」 2010-10-11
  • 打赏
  • 举报
回复
在服务属性里 可以看到查询时间,修改该值(300)
z184931481 2010-10-11
  • 打赏
  • 举报
回复
除了重新配置阈值,还有其他办法没
旁加问题,为什么2000下可以而2005规则下不行,是不是对应补丁问题
加载更多回复(5)

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧