今天在SSMS里查询占用了最多的 CPU 累计使用率看到了这条语句
大家议优化一下这个T-SQL。
先不考虑索引问题,大家把这几个关键字看看用什么来替代能最好
 
where      CYCLTN<>@ClientID and 
                                                   
(ltrim(rtrim(CYCAD1))+ltrim(rtrim(CYCAD2))+ltrim(rtrim(CYCAD3)))<>ltrim(rtrim(@Address))  
       
AND      (      (CYHPHE=@Mobile or CYBPHE=@Mobile or CYFPHE=@Mobile) or       
          (CYHPHE=@Phone or CYBPHE=@Phone or CYFPHE=@Phone) 

解决方案 »

  1.   

    SELECT  *
    FROM    tb
    WHERE   CYCLTN <> @ClientID
            AND REPLACE(CYCAD1 + CYCAD2 + CYCAD3, SPACE(0), '') <> REPLACE(@Address,
                                                                  SPACE(0), '')
            AND ( CHARINDEX(',' + @Mobile + ',',
                            ',' + CYHPHE + ',' + CYBPHE + ',' + CYFPHE, ',') > 0
                  OR CHARINDEX(',' + @Phone + ',',
                               ',' + CYHPHE + ',' + CYBPHE + ',' + CYFPHE, ',') > 0
                )没想到太好的办法...
      

  2.   

    举例 上面几个字段大致存储的数据类型。
    CYCLTN 里面的存储数据:0000000003
    CYCAD1:              殷高路,
    CYCAD2:              601室,
    CYCAD3:              null   
    CYHPHE:              56083311  
    CYBPHE:              15933262021    
    CYFPHE:              68650016                                    
      

  3.   

    检索条件中,对列进行操作了。所以检索变为全表检索。
    (ltrim(rtrim(CYCAD1))+ltrim(rtrim(CYCAD2))+ltrim(rtrim(CYCAD3)))<>ltrim(rtrim(@Address))