有一个视图select......
 
FROM [dbo].[xmlTicket] XT left join LSEPropertyNameList LP
  on XT.PropertyName=LP.PropertyName and LP.ID=1 left join GetTicketQueuelist Q
  on XT.AssignedToTeamName=Q.Name 
  
  
 where LP.PropertyName is not null 
    or Q.Name is not null 呈现主要连接关系,XT的数据量比较大,LP和Q的数据量都比较小几百,以上出现字段都添加了索引了,但是我估计是因为where语句的关系,速度很不理想,我想提取个top10000的数据看看都会花很久然后就懒得等手动中止了,求大神帮忙。

解决方案 »

  1.   

    你的where条件没啥筛选能力,2008的话可以在PropertyName 和Name 加过滤索引
      

  2.   

    怎么想不清楚 过滤索引的作用?最后条件过滤的是在连接查询where 语句后出现的null值啊
      

  3.   

    我怎么可能不知道你的索引建在源表上呢。你又不是搞索引视图。算了,不同书籍的翻译不同而已:
    filter index。不是叫你过滤掉索引
    你最好把执行计划搞出来看看问题出在哪里,如果可以的话,where条件最好多加点字段
      

  4.   

    使用is not null或者is null,会导致系统无法使用索引,进行全表扫描。
      

  5.   

    除了is not / is null 之类用不到索引外,leftjoin 本来就慢, top 也要sort,所以很慢。看下你条件,不就是要inner join么?
      

  6.   

    这样的left join 不建议用视图
      

  7.   

    换成两个inner join 再union alL能满足逻辑否
    select......
     
    FROM [dbo].[xmlTicket] XT  join LSEPropertyNameList LP
      on XT.PropertyName=LP.PropertyName and LP.ID=1 
      
      union all
      select......
     
    FROM [dbo].[xmlTicket] XT 
       GetTicketQueuelist Q
      on XT.AssignedToTeamName=Q.Name  
      

  8.   

    先檢查where部份應用到哪些字段,對應經常作為where條件的字段可以考慮創建索引來提高性能,
    檢查執行計劃,看計劃成本和使用到哪些索引,對於無法使用到索引的部份,可指定具體的索引,比便使用到索引提高查詢性能。
      

  9.   

    把这段sql放在执行计划中看一下,用到索引了吗?你这段sql中没有列出select的字段。如果select的字段没有索引,就会用到书签查找,所以会慢。