选择表还是选择视图?

ykh*_*ykh 1 sql-server-2008

一位 SQL-DBA 告诉我,这些语句之间的性能存在巨大差距,这两个语句都是从存储过程调用的:

-- Procedure that select from table directly
Select * From [Table] Where condition

-- Procedure that select from a view
Select * From [View] Where condition
Run Code Online (Sandbox Code Playgroud)

SQL-DBA 告诉我从表中选择更快,因为当您从视图中选择时,将首先选择所有数据然后过滤,但从表中它将直接应用过滤。我是一名开发人员,我对数据库了解不多,所以我希望有专家在这方面给我建议。

回答这个问题后,我想我将能够知道使用视图是否是最佳实践。

Mar*_*ith 7

SQL-DBA 告诉我从表中选择更快,因为当您从视图中选择时,将首先选择所有数据然后过滤,但从表中它将直接应用过滤。

作为一般陈述,这是无稽之谈。视图定义在查询优化期间展开,谓词被下推,就像您直接针对表进行过滤一样。

您可以检查执行计划以确认这一点。

如果您对计算表达式的结果进行过滤,那么这可能会出现问题(与表上的任何 unsargable 表达式相同)并且SQL Server存在问题,没有将谓词向下推至包含 window 的视图所能做的范围内职能。