查询时间执行
问题描述:
只想问问哪些需要更多时间。查询时间执行
举例如下场景:
SELECT *
FROM
(SELECT *
FROM t1
WHERE [Date] BETWEEN "20151012" AND "20151018"
UNION ALL
SELECT *
FROM t2
WHERE [Date] BETWEEN "20151012" AND "20151018"
UNION ALL
SELECT *
FROM t3
WHERE [Date] BETWEEN "20151012" AND "20151018"
) AS T
或本声明:
SELECT *
FROM
(SELECT * FROM t1
UNION ALL
SELECT * FROM t2
UNION ALL
SELECT * FROM t3) AS T
WHERE
[Date] BETWEEN "20151012" AND "20151018"
非常感谢!
答
我认为最安全,最明确的版本是:
SELECT *
FROM t1
WHERE [Date] BETWEEN "20151012" AND "20151018"
UNION ALL
SELECT *
FROM t2
WHERE [Date] BETWEEN "20151012" AND "20151018"
UNION ALL
SELECT *
FROM t3
WHERE [Date] BETWEEN "20151012" AND "20151018"
没有必要希望查询计划是要找出哪些指标可以在子查询中使用。你可能会得到同样的表现,但是你不会因此而变得更糟。
答
SQL Server在将谓词向下推送到基表时不会有任何问题。
您可以检查执行计划来验证这一点。
我会更关心字符串文字的双引号。您应该使用单引号,以便查询在默认quoted_identifier
设置下正常工作,并且不会将20151012
解释为尝试的列引用。
大机会他们会表现相同...你不能检查? –
使用EXPLAIN来检查执行计划或实际运行查询。 –
第一个查询不需要外部'SELECT * FROM',它只是多余的。就查询执行时间而言,它取决于不同的因素(表格的大小,每个表上的索引等)。试试拉马先生的建议,看看执行计划的样子。 –