【发布时间】:2018-04-15 21:48:51
【问题描述】:
我对此查询的行为感到非常困惑(将其更改为实际查询):
select * from fs_export_stage_data_customer m
cross apply (select count(*) from fs_export_stage_data_customer m2 where m2.inscode=m.inscode) sq1(cnt)
inner join fs_export_stage_session se on m.session=se.id
where cnt>1
order by m.inscode,m.comb_dbupddate
按原样,它在
加入的执行计划: https://www.brentozar.com/pastetheplan/?id=Hk1cU3KRb
【问题讨论】:
-
您是否使用了查询分析器或查看了执行计划,以确定它可能在哪里导致如此多的计算,以至于它会减慢如此大的速度?
-
在此处粘贴您对内部联接查询的实际执行计划
-
寻求性能帮助的问题应包括 DDL、DML 所涉及的表以及测试数据。如果您的测试数据很大,请尝试为表编写模式和统计信息(右键单击数据库->生成脚本->选择特定数据库对象->在下一个屏幕中选择高级并选择脚本统计信息)并将其粘贴到有问题的地方。使用此信息,任何人都可以重现您面临的相同问题。否则,回答您的问题变得非常困难。粘贴服务器版本也有帮助
-
您的查询被低估了,它至少现在不应该使用嵌套循环和实际索引。哈希连接可以帮助您,但我们仍然希望您的实际计划采用 xml 格式
-
@GeorgeMenoutis 查询引用了执行计划屏幕截图中显示的不同表?此外,在两个查询的问题中都包含
SET STATISTICS IO ON输出
标签: sql sql-server tsql inner-join