繁体   English   中英

SQL子查询性能问题

[英]SQL Sub-Query performance issue

我的SQL子查询遇到性能问题。

作为硬编码查询,运行大约需要1秒钟:

SELECT   ColumnA
        ,ColumnB
        ,ColumnC
FROM    [LinkedServer].[Database].[Schema].[View]
WHERE   ColumnA IN 
    (
        'ABC',
        'DEF',
        'HIJ',
        'KLM'
    )

但是,以下代码需要一分钟的时间才能运行:

SELECT   ColumnA
        ,ColumnB
        ,ColumnC
FROM    [LinkedServer].[Database].[Schema].[View]
WHERE   ColumnA IN 
    (
        SELECT ColumnA FROM #TempTable
    )

临时表包含与硬编码示例相同的4行。 链接服务器上的视图包含大约。 700,000行(不幸的是,这超出了我的控制范围)。 ColumnA数据类型相同,并且两个表都已建立索引。

关于如何改善此查询性能的任何想法?

非常感谢。

尝试JOIN

SELECT   V.ColumnA
        ,V.ColumnB
        ,V.ColumnC
FROM    [LinkedServer].[Database].[Schema].[View] V
INNER JOIN #TempTable T ON V.ColumnA = T.ColumnA

它可能与查询计划的创建方式有关。 在一种情况下,SQL Server知道在比较中将使用什么值,在第二种情况下,它正在估计。 单击“包括实际执行计划”后,在单独的Management Studio窗口中运行每个查询。 您可能会看到不同的计划。 我要检查的第一件事是将鼠标悬停在链接动作的箭头上(从粗线开始),然后将“估计的行数”与“实际的行数”进行比较。 这些值之间的较大差异(系数为10?)可能导致SQL Server做出错误的决定(表扫描与索引等)。如果看到此错误,则可以考虑让SQL更改其计划的提示-如果需要使用慢查询! 提示的最大问题是,随着数据量的变化,提示很容易成为障碍而不是好处,因此被认为是不得已的方法。

链接服务器供应商为我提供了其他来源。 现在,我连接到单个表,而不是连接到视图(它本身分布在多个服务器上)。 结合Brian的INNER REMOTE JOIN建议,几乎立即返回完整的数据集。

尽管我无法遵循增强的特权/链接服务器选项,这令人有些沮丧,但至少此查询运行良好。

非常感谢大家的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM