我正在使用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都可以完成所有工作吗?
答案 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处理以及排序。
找到答案的最可靠方法是尝试并查看。