查询一个 - 索引搜索
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'
查询两个
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'
查询三 - 索引搜索
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%'
查询一和三在sql server中速度很快,但查询二太快,结果不会出现。
在另一台服务器中,所有这些都很快,我运行sp_updatestats
,但它并不好。
如何解决这个问题?
答案 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%'