Tsql 选择*或单个列

Tsql 选择*或单个列,tsql,Tsql,他们之间的表现有什么不同吗 select * from table name 及 我想,由于sql server解析您的语句,select*占用的cpu周期减少了一些,但我不认为它会产生明显的区别,因为使用select*是一种sql反模式。当您指定列时,数据库的运行速度更快—它不必查找列,更重要的是,您不应该指定超出实际需要的列。如果查询中有联接,则至少有一列不需要联接列,因此SELECT*在带有联接的查询中返回记录的速度总是较慢,因为它返回的信息比需要的多 现在所有这些听起来像是一个小的改进

他们之间的表现有什么不同吗

select *
from table name


我想,由于sql server解析您的语句,select*占用的cpu周期减少了一些,但我不认为它会产生明显的区别,因为使用select*是一种sql反模式。当您指定列时,数据库的运行速度更快—它不必查找列,更重要的是,您不应该指定超出实际需要的列。如果查询中有联接,则至少有一列不需要联接列,因此SELECT*在带有联接的查询中返回记录的速度总是较慢,因为它返回的信息比需要的多

现在所有这些听起来像是一个小的改进,在一个小系统中可能是这样,但是随着数据库的增长和变得繁忙,性能影响会变得更大。没有理由使用SELECT*

SELECT*也不利于维护,尤其是当您使用它插入记录时——请始终在使用SELECT的insert语句中指定要插入的列和SELECT中的字段。如果您更改表结构,它将断开。您还可能会显示不希望看到的用户列,例如为复制添加的GUID

如果至少在SQL Server的视图中使用SELECT*,则在基础表发生更改时,视图仍不会自动更新。如果有人愚蠢地想在表中重新安排列顺序,是的,我知道你不应该这样做,但人们有时使用SELECT*这样做可能意味着数据将显示在报告或插入中的错误列中,这可能会导致一些问题,可能会造成误解。我能想到一个例子,在一个临时表格中,两列被交换,社会保险号码变成了我们打算支付给演讲人的金额。您可以看到,这可能会真正破坏记帐,除非我们没有使用SELECT*,所以我们是安全的,因为列保留了相同的名称


我想指出的是,使用SELECT*甚至不会节省很多开发时间。即使在一个大表中使用表名也最多需要15秒,因为我从SQL Server的对象浏览器中将它们拖过来,您可以一步获得所有列。

否-事实上相反-由于SQL Server必须首先查阅数据字典以查找表中的列,因此需要更多的周期。

,我完全忘记了需要首先收集列定义。但是从可靠性/可维护性的角度来看,这有很大的区别——我认为您不应该在生产代码中使用SELECT*。如果表结构突然改变-删除了一列或添加了两个blob。。。。。我认为你应该明确地指定你想要的栏目。我真的认为在这个彻底的回答中应该提到EXISTS SELECT*FROM…的特例。我不想从你的回答中转移注意力,但在某些例外情况下,可以使用SELECT*。例外情况当然证实了这一规则。我使用SELECT*的一种情况是,在特定日期为对象构造一个版本表时,它是根据日志构造的。这是向官方当局报告所必需的。在这种情况下,我首先创建一个临时表,它是原始表的模拟,由SELECT*intm_tbl FROM object_table创建,其中1=0;然后继续插入intm_tbl SELECT*FROM…[续]这样我就不必每次对象表更改时都更改这些过程。无论如何,正如我所说,这只是一个例外。@TT.,是的,Select*有一些可以接受的用法。这是有原因的。然而,在绝大多数情况下,这是应该避免的。创建临时信息通常不是问题。但是,为避免更改sps,通常会产生以下问题:
select [col1]
      ,[col2]
       ......
      ,[coln]
from table name