【问题标题】:SQL Server 2005 - Filter on Inner or Outer QuerySQL Server 2005 - 过滤内部或外部查询
【发布时间】:2014-11-17 17:05:44
【问题描述】:

使用 SQL Server 2005 存储过程,它有一个从子查询中选择的外部查询外层查询,让SQL查询引擎制定出最佳执行计划?

我不能把实际的查询放在上面,因为它包含业务表/视图名称和列,以及相当多的连接,但本质上一般架构是......

伪 Sql...

CREATE PROCEDURE usp_Blah_GetForDateRange
(
    @DateFrom   smalldatetime
,   @DateTo     smalldatetime
)
AS
BEGIN
    SELECT
        InnerQuery.MyField
    FROM
        (
            SELECT
                MyField
            FROM
                MyView
            JOIN SomeTableLargeTable ON ....

            JOIN AReferenceTable ON ...

            /* Apply date restriction here on the inner query? */
            WHERE
                EffectiveDate BETWEEN @DateFrom AND @DateTo
        ) InnerQuery

    JOIN
        YetAnotherLargeTable ON ....

    JOIN SomeMoreRefTables ON ....

    /* Or here on the outer? */
    WHERE
        EffectiveDate BETWEEN @DateFrom AND @DateTo;
END

MyView、SomeTableLargeTable 和 YetAnotherLargeTable 都有大约五六百万行。

谢谢。

【问题讨论】:

  • 那不是很容易测试吗?
  • 我可以,但可能需要半天时间才能使用正确的参数值设置代表性数据,因为实际查询非常长,带有负载参数和连接负载的连接负载!我只是想知道是否值得花时间去尝试!

标签: sql-server-2005 join filter subquery


【解决方案1】:

经验法则是,您越早从查询中排除数据越好。因此,如果不实际运行查询,我会说内部联接

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2017-07-22
    • 2011-01-25
    • 2013-07-28
    相关资源
    最近更新 更多