【问题标题】:sql execution plan nested loopsql执行计划嵌套循环
【发布时间】:2010-01-05 23:32:35
【问题描述】:

试图在我拥有的查询的执行计划中删除嵌套循环(mssql 2005)。有下表:

TxnID 大整数 客户 ID 大整数 col1 varchar(4) col2 varchar(4) col3 varchar(4) TxnCurrency char(3) TxnAmt 钱 TxnDate 日期时间

-- query 1
SELECT CustID, TxnCurrency, SUM(TxnAmt) AS TxnAmt
FROM   table
WHERE  TxnDate >= @date1 and TxnDate < @date2
       and col1 IN ( @list )
       and col2 = @param
GROUP BY CustID, TxnCurrency

-- query 2
SELECT TxnCurrency, SUM(TxnAmt) AS TxnAmt
FROM   table
WHERE  TxnDate >= @date1 and TxnDate < @date2
       and CustID = @custID
GROUP BY TxnCurrency

TxnID 是主键,在 CustID、TxnDate 上有非聚集索引

我应该创建另一个包含列的索引来解决嵌套循环吗?

【问题讨论】:

  • 请向我们提供有关该问题的更多信息 - 它正在读取多少条记录以及需要多长时间?

标签: sql-server sqlperformance


【解决方案1】:

这些查询是分开的还是被合并的?

在查询 1 中,如果您打算仅基于 TxnDate 进行选择,您可能应该在该列上放置一个非聚集索引。

嵌套循环并不总是一件坏事。根据您正在使用的集合的大小,它们可能是最佳的。您认为使用 Merge 或 Hash join 会看到更好的结果吗?

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 2015-06-05
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多