Sql 将查询优化为慢人
4958行受影响 表“混乱”。扫描计数20,逻辑读取359816,物理读取525,预读读取4626,lob逻辑读取0,lob物理读取0,lob预读读取0。 表“工作文件”。扫描计数0,逻辑读取0,物理读取0,预读读取0,lob逻辑读取0,lob物理读取0,lob预读读取0。 表“工作台”。扫描计数0、逻辑读取0、物理读取0、预读读取0、lob逻辑读取0、lob物理读取0、lob预读读取0。不需要子查询。这样试试Sql 将查询优化为慢人,sql,sql-server,Sql,Sql Server,4958行受影响 表“混乱”。扫描计数20,逻辑读取359816,物理读取525,预读读取4626,lob逻辑读取0,lob物理读取0,lob预读读取0。 表“工作文件”。扫描计数0,逻辑读取0,物理读取0,预读读取0,lob逻辑读取0,lob物理读取0,lob预读读取0。 表“工作台”。扫描计数0、逻辑读取0、物理读取0、预读读取0、lob逻辑读取0、lob物理读取0、lob预读读取0。不需要子查询。这样试试 select distinct m1.jobreference,m1.assid,m
select distinct m1.jobreference,m1.assid,m2.assid
From dbo.mess m1
inner join dbo.mess m2
on m1.JobReference=m2.jobreference and m1.assid!=m2.assid
where
m1.jobreference not in (
select Jobreference from dbo.mess where routingkey='j.asschanged')
如果确实需要删除重复项,请使用Distinct。如果您的查询不会产生重复的结果,或者您不担心重复,那么请从查询中删除不同的关键字
SELECT m1.jobreference,
m1.assid,
m2.assid
FROM dbo.mess m1
INNER JOIN PRD_Phoenix.dbo.mess m2
ON m1.JobReference = m2.jobreference
AND m1.assid != m2.assid
Group By m1.jobreference,m1.assid,m2.assid
Having count(case when m1.routingkey = 'j.asschanged' then 1 end) = 0
然后您需要考虑明显的索引是m2jobreference,assid和M1JobReference,assid
我关心的是select distinct和高基数联接的可能性。如果没有关于数据结构的更多信息,就很难提出进一步的建议。问题是如何加快速度?需要3分钟的时间表定义和实际的XML执行计划是什么。表中有索引吗?有索引吗?创建表[dbo].[Mess][Id][int]IDENTITY1,1 NOTNULL,[JobReference][int]NOTNULL,[JobStatusId][int int]NULL,[AssId][int int int int NULL],约束[PK U消息]主键聚集[Id]ASC,带PAD_INDEX=OFF、STATISTICS_norecocomputer=OFF、IGNORE_DUP_KEY=OFF、ALLOW_ROW_LOCKS=ON、ALLOW_PAGE_LOCKS=ON、FILLFACTOR=90 ON[PRIMARY]ON[PRIMARY]text image_ON[PRIMARY]GOStrange。这种变化需要更长的时间。我想知道这张桌子上的数据是否有问题。Hmmmm…@JamesKhan-只需检查更新的查询。将执行计划发布为xml
select distinct jobreference, assid, assid2
from (select m1.jobreference, m1.assid, m2.assid as assid2,
sum(case when m2.routingkey = 'j.asschanged' then 1 else 0 end) over (partition by m2.jobreference) as cnt
from dbo.mess m1 inner join
PRD_Phoenix.dbo.mess m2
on m1.JobReference = m2.jobreference and m1.assid <> m2.assid
) mm
where cnt = 0;