当前位置: 代码迷 >> Sql Server >> 索引假脱机开销大,改如何优化
  详细解决方案

索引假脱机开销大,改如何优化

热度:93   发布时间:2016-04-24 10:03:57.0
索引假脱机开销大,改怎么优化?
本帖最后由 u012956650 于 2014-08-26 22:44:12 编辑
本语句是用于查询表中workid不重复的数据,SQL语句如下

select ID,DepName,WorkId,Counts,UpdateTime,IsValid,IsOnline  FROM Dep AS A  
where ID IN(SELECT TOP 1 ID FROM  Dep  WHERE WorkId =A.WorkId and 
DepName ='customer' and IsValid=0 ) ORDER BY WorkId

执行计划:



请问索引假脱机是什么情况?如何把这条语句优化使执行效率更高
------解决方案--------------------
换一个

SELECT  ID ,
        DepName ,
        WorkId ,
        Counts ,
        UpdateTime ,
        IsValid ,
        IsOnline
FROM    ( SELECT    * ,
                    ROW_NUMBER() OVER ( PARTITION BY workid ORDER BY id ) rn
          FROM      dep
          WHERE     DepName = 'customer'
                    AND IsValid = 0
        ) a
WHERE   rn = 1

------解决方案--------------------
我也写一个,不知对不对,效果如何。

select ID, DepName, WorkId, Counts, UpdateTime, IsValid, IsOnline FROM Dep AS A
inner join (SELECT WorkId WorkId1, min(ID) ID1 FROM Dep WHERE DepName ='customer' and IsValid=0 group by WorkId) AS b on a.WorkId=b.WorkId1 and a.ID=b.ID1
order by WorkId
  相关解决方案