关于为什么这个查询运行如此缓慢的任何想法?

时间:2016-12-19 07:08:44

标签: sql sql-server database-administration sqlperformance

  1. 查询一个 - 索引搜索

    SELECT P.Date_Send_Ins,C.* 
    FROM DATABASE1..TABLE1 P  WITH (FORCESEEK) JOIN DATABASE2..TABLE2 C   ON P.COLUMN1  = C.COLUMN1  AND P.COLUMN2 =    C.COLUMN2 
    WHERE    LEFT(C.COLUMN3 ,7) LIKE 'YYYY/MM' and LEFT(P.COLUMN3 ,2) = 'YS'
    
  2. 查询两个

    SELECT P.Date_Send_Ins,C.*
    FROM DATABASE1..TABLE1 P   JOIN DATABASE2..TABLE2 C   ON P.COLUMN1  = C.COLUMN1  AND P.COLUMN2 = C.COLUMN2 
    WHERE    LEFT(C.COLUMN3 ,7) LIKE 'YYYY/MM' and LEFT(P.COLUMN3 ,2) = 'YS'
    
  3. 查询三 - 索引搜索

    SELECT P.Date_Send_Ins,C.* 
    FROM DATABASE1..TABLE1 P   JOIN DATABASE2..TABLE2 C   ON P.COLUMN1  = C.COLUMN1  AND P.COLUMN2 = C.COLUMN2 
    WHERE    LEFT(C.COLUMN3 ,7) LIKE 'YYYY/MM' and  P.Date_Send_Ins LIKE 'YS%'
    
  4. 查询一和三在sql server中速度很快,但查询二太快,结果不会出现。

    在另一台服务器中,所有这些都很快,我运行sp_updatestats,但它并不好。

    如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

避免在where子句中的任何表列上使用函数。几乎总是性能问题。例如,不要使用LEFT()

SELECT P.Date_Send_Ins,C.* 
FROM DATABASE1..TABLE1 P  
JOIN DATABASE2..TABLE2 C   ON P.COLUMN1  = C.COLUMN1  AND P.COLUMN2 = C.COLUMN2 
WHERE  C.COLUMN3 LIKE 'YYYY/MM%' 
and P.COLUMN3 = 'YS%'