【问题标题】:Would chopping query into smaller views speed thing up?将查询切割成更小的视图会加快速度吗?
【发布时间】:2012-11-06 22:30:48
【问题描述】:

例如,如果我有

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,我不明白。

谢谢

【问题讨论】:

  • 您使用的是什么 rdbms?数据库服务器? mysql?甲骨文? 还是什么
  • 哦,对不起,我的意思是问一般或理论上,我不知道有什么区别。我使用的是 SQL Server 2008 R2,谢谢。
  • 您是否尝试查看这两个查询的执行计划?
  • 对不起,我知道如何调出执行计划,但我不知道如何阅读执行计划

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


【解决方案1】:

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

例子:

声明1

SELECT * FROM viewTest1

声明2

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

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

你一定要读这本书SQL Server Execution Plans

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 对不起,我知道如何调出执行计划,但我不知道如何阅读执行计划
      【解决方案4】:

      我创建了一个样本数据集,表中有超过 20 万行,执行计划是相同的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-14
        • 2018-02-18
        • 2014-10-04
        • 1970-01-01
        • 1970-01-01
        • 2010-11-17
        相关资源
        最近更新 更多