【问题标题】:Is this join hint dangerous?这个加入提示危险吗?
【发布时间】:2010-09-28 23:03:21
【问题描述】:

一位同事要求我查看一些表的索引,因为他的查询运行时间很长。一个多小时。

select count(1)
from databaseA.dbo.table1
inner join databaseA.dbo.table2 on (table1.key = table2.key)
inner join databaseB.dbo.table3 on (table1.key = table3.key)

注意不同的数据库。这是从 DatabaseB 运行的

表 1 和 2 的记录超过 200 万条。 Table3 有十几条记录。

我查看了查询计划,优化器决定对表 1 和表 2 进行嵌套循环索引搜索,表 3 作为驱动表!

我的第一个假设是 Tables1 和 2 上的统计信息严重混乱,但在更新统计信息之前,我尝试添加一个连接提示:

select count(1)
from databaseA.dbo.table1
inner HASH join databaseA.dbo.table2 on (table1.key = table2.key)
inner join databaseB.dbo.table3 on (table1.key = table3.key)

15 秒后返回结果。

由于时间紧迫,我将结果反馈给了他,但我担心这可能会导致以后出现问题。

我应该重新审视统计问题并以这种方式解决问题吗?错误的查询计划可能是因为连接来自不同的数据库吗?

谁能根据你的经验给我一些想法?

【问题讨论】:

    标签: sql join sql-server-2000 join-hints


    【解决方案1】:

    涉及链接服务器的运行缓慢的查询可能与排序规则有关。 有关背景信息,请参见此处:http://blogs.msdn.com/psssql/archive/2008/02/14/how-it-works-linked-servers-and-collation-compatibility.aspx 哈希连接提示强制排序,因此可以解释性能提升。

    以下是设置选项的方法:

    EXEC master.dbo.sp_serveroption 
        @server=N'databaseA', 
        @optname=N'collation compatible', 
        @optvalue=N'true'
    
    EXEC master.dbo.sp_serveroption 
        @server=N'databaseA', 
        @optname=N'use remote collation', 
        @optvalue=N'false'
    

    -Edoode

    【讨论】:

      【解决方案2】:

      嵌套循环不是最合适的吗?取表 3 中的 12 条记录,匹配​​表 1 中的 12 条记录,匹配​​表 2 中的 12 条记录。

      否则,您的散列连接也会强制执行排序 - 这意味着您将从表 1 和表 2 中散列 100 万条记录,然后连接到表 3 中的 12 条记录。

      我会查看这两个计划的统计信息 - 我怀疑循环连接实际上更有效,但被阻止或您的哈希连接正在利用缓存数据。

      但是 - 是的 - 一般来说,加入提示是最后的手段。

      【讨论】:

        【解决方案3】:

        检查统计信息,并首先在表上建立索引。索引提示可能会导致问题。如果表中的数据发生变化,优化器将无法选择更有效的计划,因为您已强制它始终使用哈希。

        【讨论】:

          【解决方案4】:

          我会首先怀疑统计数据。

          您无疑知道,在 99% 的情况下都应避免加入提示,并且仅在您有证据证明它们是绝对需要时才使用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-31
            • 2014-08-14
            • 2023-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多