Does Select * from <table/view>
考虑到存储过程是代码的编译单元,在动态 T-SQL 语句中使用通配符解释与在存储过程中使用通配符解释是否具有相同的性能影响?
要回答你的问题,需要稍微拆开一下:
Select * from 是否具有相同的性能影响
关于通配符解释
SELECT *
有3个主要类型的缺点:
- 代码维护:使用 SELECT * 会降低复杂表/查询的易读性,并且当客户端应用程序期望查询得到特定结果但表发生更改时,可能会导致问题
- 网络性能:将结果返回给客户端应用程序时使用 SELECT * 意味着所有列都将返回给客户端;如果客户端仅使用其中的某些列,则会浪费带宽并且应用程序运行速度会比其应有的速度慢。
- 索引/查询计划性能:在某些情况下,如果您的查询实际上只需要返回参与索引的列,但您将它们全部返回,那么您可能会得到引擎创建的更糟糕的查询计划。
我不确定你所说的“关于通配符解释的含义”是什么意思,但我怀疑你误解了为什么 SELECT * 是一个坏主意 - SQL 引擎无论如何都会验证提供的列; “扩展”通配符的成本本质上是0。
假设存储过程是一个已编译的代码单元
存储过程并不是真正的“已编译的代码单元”:存储过程的查询计划通常会在首次运行后被缓存,但在许多/大多数情况下,即席 SQL 语句实际上也是如此。
现在,真正回答你的问题:Yes,使用的任何缺点SELECT *
ad-hoc SQL 中的 SQL 也同样适用于存储过程中的 SQL。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)