关于为什么这个查询会 运行 这么慢的任何想法?
Any ideas on why this query would run so slow?
查询一--索引查找
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 服务器中速度很快,但查询二太慢,结果没有出现。
在另一台服务器上,它们都很快,我运行 sp_updatestats
,但并没有更好。
如何解决这个问题?
避免在 where 子句中的任何 table 列上使用函数。几乎总是性能问题。例如不要使用 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%'
查询一--索引查找
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 服务器中速度很快,但查询二太慢,结果没有出现。
在另一台服务器上,它们都很快,我运行 sp_updatestats
,但并没有更好。
如何解决这个问题?
避免在 where 子句中的任何 table 列上使用函数。几乎总是性能问题。例如不要使用 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%'