SQL Server 外部应用查询优化

Posted

技术标签:

【中文标题】SQL Server 外部应用查询优化【英文标题】:SQL Server Outer Apply Query Optimization 【发布时间】:2018-10-26 15:55:49 【问题描述】:

我有两个表 - 表 A 和表 B。

表 A 有 121,903 行。表 B 只有 95 行。

我需要将表 A 与表 B 连接起来,这样我将获得表 B 的第一行,其中的行与表 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 表“TableAB”的大型查询的一部分。

谢谢。

【问题讨论】:

也许 SQL Server 认为 TableB 有更多行...因为这在您的执行计划中是一个很大的数字(1100 万)?你能显示DBCC SHOW_STATISTICS吗?使用SET STATISTICS IO ON 运行查询并在此处完成计划:brentozar.com/pastetheplan 当然,我会运行它并上传计划。谢谢。 11m 是 TableA 的行数 * TableB 的行数 (121,903 * 95 = ~11m)。由于它使用的是外部应用,它将表A的每一行与表B连接起来以获得结果。 查询计划:brentozar.com/pastetheplan/?id=S12sLaenX SortCriteria 是什么?你说你想摆脱那种但没有告诉我们 【参考方案1】:

由于执行的大部分时间都用于对TableB 进行排序,因此提高性能的最有可能的方法是添加一个索引,该索引涵盖SortCriteria 并包含TableB 中在查询中选择的所有列。

【讨论】:

添加覆盖 SortCriteria 的非聚集索引并包含查询中选择的 TableB 中的所有列提高了性能。谢谢。

以上是关于SQL Server 外部应用查询优化的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出的 SQL Server 查询优化

SQL Server 2005 查询优化

SQL Server:查询性能分析 - 任何优化想法?

WP7 SQL Server CE 查询优化

SQL Server查询优化方法

sql server都有哪些查询优化方法