查询时间执行

查询时间执行

问题描述:

只想问问哪些需要更多时间。查询时间执行

举例如下场景:

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" 

非常感谢!

+3

大机会他们会表现相同...你不能检查? –

+1

使用EXPLAIN来检查执行计划或实际运行查询。 –

+0

第一个查询不需要外部'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" 

没有必要希望查询计划是要找出哪些指标可以在子查询中使用。你可能会得到同样的表现,但是你不会因此而变得更糟。

SQL Server在将谓词向下推送到基表时不会有任何问题。

您可以检查执行计划来验证这一点。

我会更关心字符串文字的双引号。您应该使用单引号,以便查询在默认quoted_identifier设置下正常工作,并且不会将20151012解释为尝试的列引用。