订购视图比调用它的查询更好吗?

时间:2012-04-03 09:54:07

标签: sql sql-server sql-server-2008 tsql

我正在使用SQL Server 2008,我有一种情况,我认为在我的应用程序代码中我总是按照其中包含的日期排序,所以我想知道效率等。

我发现了这篇博文SQL Server - Order a View,其中解释说可以订购视图而不是:

CREATE VIEW v
AS
    SELECT a,b,d FROM t
GO
SELECT a,b,d FROM v ORDER BY d

我能做到:

CREATE VIEW v
AS
    SELECT TOP(100) PERCENT a,b,d FROM t ORDER BY d
GO
SELECT a,b,d FROM v

并获得相同的结果。

我的问题是,上述哪一项效率更高?

如果我希望它尽可能快,我会用第二种方法做得更好,或者它没有任何区别,无论如何sql server都可以完成所有工作吗?

3 个答案:

答案 0 :(得分:5)

这是moot point

  

ORDER BY子句在视图,内联函数中无效   表和子查询

使用TOP(100) PERCENT的诀窍是一种不好的做法。尝试通过向视图添加ORDER BY来强制执行订单实际上是在错误的树上咆哮。如果您需要ORDER BY,请在查询中询问。故事的结尾。

答案 1 :(得分:1)

补充Remus答案,如果您的视图v类似于您的视图:

SELECT a,b,d FROM t

一旦你

SELECT a,b,d FROM v ORDER BY d

你实际上在做什么

SELECT a,b,d FROM t ORDER BY d

因为常规(非索引)视图仅作为SQL上的SQL语句存在,所以一旦SQL从视图中看到select *,它就会在生成将要运行的执行计划之前替换视图定义

答案 2 :(得分:0)

我希望这两者的性能非常相似 - 如果有的话,从更简单的视图版本中选择可能会稍快一些,因为这两个查询本质上是相同的,但查询的更复杂版本包括TOP N处理以及排序。

找到答案的最可靠方法是尝试并查看。