1

例如,如果我有

CREATE VIEW viewTest1 AS
SELECT col_a, col_b, col_c, COUNT(1)
FROM table_name
GROUP BY col_a, col_b, col_c

SELECT * FROM viewTest1

另一个是

CREATE VIEW viewTest2 AS
SELECT col_a, col_b, col_c
FROM table_name

SELECT *, COUNT(1) FROM viewTest2
GROUP BY col_a, col_b, col_c

第二个跑得更快吗?为什么?

我的测试结果是第二个是 FASTER,我不明白。

谢谢

4

4 回答 4

2

这取决于您使用的数据库引擎的优化器。有些数据库引擎能够重组整个查询,有些则不能。据我所知,Oracle 有一个控制重组行为的参数。

所以理论上永远不会有一个单一的答案。

于 2012-11-19T09:16:43.887 回答
2

使用SQL Sentry Plan Explorer进行更详细的分析执行计划

例子:

声明1

SELECT * FROM viewTest1

在此处输入图像描述

声明2

SELECT *, COUNT(1) FROM viewTest2
GROUP BY col_a, col_b, col_c

在此处输入图像描述

两个查询的执行计划完全相同。因此成本两个查询等于

您必须阅读本书SQL Server 执行计划

于 2012-11-19T09:02:04.090 回答
1

不可能有如此不同。但是,您可以查看执行计划以了解更多成本详情。

您可以将两个查询放在同一个 sql 窗口中,只需按CTRL+L执行计划的键即可。

于 2012-11-19T04:13:43.680 回答
1

我在表中创建了一个包含超过 200k 行的样本数据集,并且执行计划是相同的。

执行计划

于 2012-11-19T10:01:25.297 回答