从构建执行计划的角度来看,"select*"有什么影响?

sl.*_*sl. 3 t-sql sql-server

我听说使用'select*'将增加SQL Server构建查询执行计划所需的时间,因为它必须找出引用表中存在哪些列.这同样适用于基于视图而不是表的查询吗?

tpd*_*pdi 6

时间可以忽略不计.是的,如果它适用于表,它适用于视图.

但是在做SQL的12年中,我还没有看到通过显式命名列而不是使用来加速查询*.

在生产代码中,我没有使用*,但这是因为代码的意思是它所说的,而不是效率,并且因为订单在绑定到结果集时很重要

在生产视图中,*如果视图的意图(如果"我的意思是说")是"引入所有列" ,我将使用; 这样,重新编译视图将获取表更改.订单在视图中无关紧要; 仅在可能使用该视图的客户端查询中.

在编辑时:让我注意,视图定义在创建视图时解析一次(直到重新编译),而不是在使用它时.因此,在发送到数据库服务器时*,column1, c2, d3, foobar发生一次的微小时间发生一次create view.

现在,将所有列恢复到客户端将比仅返回一个更慢(尽管通常不是很多).但这是一个不同的问题.