【发布时间】: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