SQL 服务器外部应用查询优化
SQL Server Outer Apply Query Optimization
我有两个 tables - Table A 和 Table B。
Table A 有 121,903 行。 Table B 只有 95 行。
我需要将 Table A 与 Table B 连接起来,这样我将获得 Table B 的第一行,其中的行与 Table A 的顺序相匹配标准。
我正在使用以下查询来获取结果。它可以正确返回结果,但存在性能问题。
;WITH [TableAB] AS
(
SELECT * FROM #TableA A
OUTER APPLY
(
SELECT TOP 1 * FROM #TableB
WHERE
([Col1] = A.[Col1]OR [Col1]IS NULL)
AND ([Col2] = A.[Col2]OR [Col2]IS NULL)
AND ([Col3] = A.[Col3]OR [Col3]IS NULL)
AND ([Col4] = A.[Col4]OR [Col4]IS NULL)
AND ([Col5] = A.[Col5] OR [Col5] IS NULL)
AND ([Col6] = A.[Col6]OR [Col6]IS NULL)
AND ([Col7] = A.[Col7]OR [Col7]IS NULL)
AND ([Col8] = A.[Col8]OR [Col8]IS NULL)
AND ([Col9] IS NULL)
AND ([Col10] IS NULL)
AND ([Col11] = A.[Col11] OR [Col11] IS NULL)
AND ([Col12] = A.[Col12]OR [Col12] IS NULL)
AND ([Col13] = A.[Col13]OR [Col13]IS NULL)
AND ([Col14] = A.[Col14] OR [Col14] IS NULL)
AND ([Col15]= A.[Col15]OR [Col15]IS NULL)
AND ([Col16] = A.[Col16] OR [Col16] IS NULL)
AND ([Col17]= A.[Col17]OR [Col17]IS NULL)
AND ([Col18]= A.[Col18]OR [Col18]IS NULL)
AND ([Col19]= A.[Col19]OR [Col19]IS NULL)
AND ([Col20] = A.[Col20] OR [Col20]IS NULL)
ORDER BY [SortCriteria]
) B
)
SELECT * FROM [TableAB]
目前执行此查询大约需要 1 分钟。有什么办法可以重写查询以提高性能吗?
请注意,这是一个数据仓库系统,上面的查询是使用 CTE table "TableAB" 的大型查询的一部分。
谢谢。
由于执行的大部分时间都花在排序 TableB
上,因此最有可能提高性能的方法是添加一个涵盖 SortCriteria
并包含 [=10= 中的所有列的索引] 在查询中选择。
我有两个 tables - Table A 和 Table B。
Table A 有 121,903 行。 Table B 只有 95 行。
我需要将 Table A 与 Table B 连接起来,这样我将获得 Table B 的第一行,其中的行与 Table A 的顺序相匹配标准。
我正在使用以下查询来获取结果。它可以正确返回结果,但存在性能问题。
;WITH [TableAB] AS
(
SELECT * FROM #TableA A
OUTER APPLY
(
SELECT TOP 1 * FROM #TableB
WHERE
([Col1] = A.[Col1]OR [Col1]IS NULL)
AND ([Col2] = A.[Col2]OR [Col2]IS NULL)
AND ([Col3] = A.[Col3]OR [Col3]IS NULL)
AND ([Col4] = A.[Col4]OR [Col4]IS NULL)
AND ([Col5] = A.[Col5] OR [Col5] IS NULL)
AND ([Col6] = A.[Col6]OR [Col6]IS NULL)
AND ([Col7] = A.[Col7]OR [Col7]IS NULL)
AND ([Col8] = A.[Col8]OR [Col8]IS NULL)
AND ([Col9] IS NULL)
AND ([Col10] IS NULL)
AND ([Col11] = A.[Col11] OR [Col11] IS NULL)
AND ([Col12] = A.[Col12]OR [Col12] IS NULL)
AND ([Col13] = A.[Col13]OR [Col13]IS NULL)
AND ([Col14] = A.[Col14] OR [Col14] IS NULL)
AND ([Col15]= A.[Col15]OR [Col15]IS NULL)
AND ([Col16] = A.[Col16] OR [Col16] IS NULL)
AND ([Col17]= A.[Col17]OR [Col17]IS NULL)
AND ([Col18]= A.[Col18]OR [Col18]IS NULL)
AND ([Col19]= A.[Col19]OR [Col19]IS NULL)
AND ([Col20] = A.[Col20] OR [Col20]IS NULL)
ORDER BY [SortCriteria]
) B
)
SELECT * FROM [TableAB]
目前执行此查询大约需要 1 分钟。有什么办法可以重写查询以提高性能吗?
请注意,这是一个数据仓库系统,上面的查询是使用 CTE table "TableAB" 的大型查询的一部分。
谢谢。
由于执行的大部分时间都花在排序 TableB
上,因此最有可能提高性能的方法是添加一个涵盖 SortCriteria
并包含 [=10= 中的所有列的索引] 在查询中选择。