--(2)产生同样的序列 然后排除里面的序号----
select top 页面大小 * from (select PersonName,PersonID,BranchName,UserName,ContractNumbe,TypeName,StartCaseDay,ROW_NUMBER() OVER (ORDER BY StartCaseDay asc) as  rownum from User_Case_view_3 where isshow=1 and (1 = 1)) b where rownum not in (
-----(1)根据时间产生倒序序列-----
 select top (页面大小*(当前页-1)+1) rownum from (select PersonName,PersonID,BranchName,UserName,ContractNumbe,TypeName,StartCaseDay,ROW_NUMBER() OVER (ORDER BY StartCaseDay asc) as  rownum from User_Case_view_3 where isshow=1 and (1 = 1))b order by rownum desc  ) order by rownum desc
---要求优化且 结果一样---
这个语句 not in  太多以后 速度慢的恐怖 以前程序员写的东西 非要要求结果一样 大大们  我sql不是很好 这个句子怎么优化?  说说原理  

解决方案 »

  1.   

    not in 一般都可以用inner join 来解决。
      

  2.   

    用exists
    举个例子:select top 10 number
    from master..spt_values a
    where not exists(select 1 from master..spt_values b
    where a.number<b.number and b.number=10)
    and type='p'
    order by number 
    /*
    number
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    */--分页
      

  3.   

    直接 双top  主键把row_number干掉
      

  4.   

    这样用 select   *  from   ( select PersonName,PersonID,BranchName,UserName,ContractNumbe,TypeName,StartCaseDay,  ROW_NUMBER() OVER (ORDER BY StartCaseDay asc) as  rownum from User_Case_view_3 where isshow=1 and (1 = 1))b  WHERE rownum BETWEEN (页面大小*(当前页-1)+1) AND 页面大小*当前页