将查询切入较小的视图会加快速度吗?

时间:2012-11-19 01:05:37

标签: sql sql-server-2008 optimization query-optimization

例如,如果我有

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

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

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

谢谢

4 个答案:

答案 0 :(得分:2)

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

示例:

<强>语句1

SELECT * FROM viewTest1

enter image description here

<强>声明2

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

enter image description here

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

您必须阅读本书SQL Server Execution Plans

答案 1 :(得分:2)

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

理论上永远不会有一个答案。

答案 2 :(得分:1)

不可能有这样的不同。但是,您可以检查执行计划以获取更多费用详情。

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

答案 3 :(得分:1)

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

Execution Plan