2011-08-11 51 views
-3

考虑到存储过程是编译的代码单元,在使用动态T-SQL语句时,Select * from <table/view>与在存储过程中使用它有相同的性能影响吗?SQL Server通配符

+2

你的问题很不清楚。一些例子会有所帮助。 – Oded

+0

为什么这个问题被拒绝投票? – klork

+0

由于我不明白的原因,我有时会被拒绝。 – Paparazzi

回答

3

要回答你的问题,它需要被百般挑剔一点:

不SELECT * FROM具有相同的性能含义 关于通配符解释

SELECT *主要有3种类型的缺点:

  • 代码维护:使用SELECT *降低复杂表/查询的易读性,并且c当客户端应用程序预期查询产生某些结果时会导致问题,但表更改
  • 网络性能:将结果返回给客户端应用程序时使用SELECT *表示所有列都将返回给客户端;如果客户端只使用其中一些列,则会浪费带宽,并且应用程序运行速度会比较慢。索引/查询计划性能:在某些情况下,如果您有一个查询只需要返回参与索引的列,但是您将其全部返回,那么您可能会得到更糟糕的查询计划发动机。

我不确定你的意思是“关于通配符解释的含义”,但我怀疑你误解了为什么SELECT *是一个坏主意 - SQL引擎无论如何均验证提供的列; “膨胀”通配符的成本基本上是0。

给出

该存储过程是代码

编译单元存储过程是不是一个真正的“的编译的代码单元”:该通常会在第一次运行后缓存存储过程的查询计划,但在许多/大多数情况下,同样适用于临时SQL语句。

现在,要实际回答您的问题:,在临时SQL中使用SELECT *的任何缺点也同样适用于存储过程中的SQL。

+0

我会指出,如果你有一个内部连接,你可能会返回比你需要的更多的列,并且在你使用select *时浪费资源。根据定义重复连接列。 – HLGEM