如何解决下面sql脚本的查询效率?select Distinct SMPBILL_ID from TSmpBasicInfo sbi
LEFT JOIN TSMPValidityStatus vs ON sbi.SMPBILL_ID = vs.BILL_ID 
 LEFT JOIN TSMPUserBasicInfo ubi ON sbi.UserID = ubi.UserID 
LEFT JOIN TSMPUserPositionSet ups ON ups.UserID = ubi.UserID  
LEFT JOIN TPositionInfo pi ON pi.PositionID = ISNULL(sbi.SalePositionID, ups.PositionID) 
 WHERE sbi.Submit_Status = 1  AND vs.LastStatus IS NULL 
AND ubi.UserType IS NOT NULL AND ubi.UserType != ''
 AND (sbi.ApproveType != 2 OR sbi.ApproveType IS NULL) 
AND vs.[CoordinatorStatus] IS NULL 
AND (sbi.DeleteFlag IS NULL OR sbi.DeleteFlag = 2)  
AND pi.RoleID = 'dc911e2d-0812-4b3c-a5aa-1aec036994f5' 
AND (( sbi.Attribute IN ('0','1','2','3','4') 
AND ( pi.Region = 'RE' OR pi.Region = 'RS' OR pi.Region = 'RSW' 
OR pi.Region = 'RNE' OR pi.Region = 'RN' )) 
OR (sbi.Attribute NOT IN ('0','1','2','3','4') 
AND sbi.Attribute IN ('5','6','7','8','9' )))

解决方案 »

  1.   

    主要是后面的in和not in使整个查询效率低,去掉后面的查询时间在0秒而加上后面in和not in查询时间为22秒
      

  2.   

    分成两组或者多组数据,再UNION试试.
      

  3.   

     (sbi.Attribute NOT IN ('0','1','2','3','4')  
    你的这个数据有规律没,能不能改写成sbi.Attribute>4?或者,把用到not in条件的表先按此条件查询出结果记入表变量或临时表,然后再与其他表关联查询,试试
      

  4.   

    不能改成sbi.Attribute>4,因为这是根据客户选择结果生成的,比如客户选择了0,4,这时就不好写sbi.Attribute>4了