选择*或单个列

时间:2011-07-27 11:35:23

标签: tsql

之间的性能是否有任何差异
select *
from table name

select [col1]
      ,[col2]
       ......
      ,[coln]
from table name

2 个答案:

答案 0 :(得分:5)

使用SELECT *是一个SQL 反模式。当您指定列时,它对数据库来说更快(它不需要查找它们),更重要的是,您不应该指定比实际需要更多的列。如果您在查询中有一个连接,则至少有一个您不需要的列(连接列),因此SELECT *总是较慢地返回带有连接的查询中的记录,因为它返回的信息多于必要。

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

SELECT *也不利于维护,特别是如果您使用它来插入记录 - 始终在使用SELECT的INSERT语句中指定要插入的列和select中的字段。如果更改表结构,它将会中断。您最后还可能会显示您不希望他们看到的用户列,例如为复制添加的GUID。

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

我想要注意的是,使用SELECT *甚至不会节省太多开发时间。当我从SQL Server中的对象浏览器中拖动它们时,即使在大型表中使用表名也需要大约15秒以上(您可以一步获取所有列)。

答案 1 :(得分:-1)

我认为select *需要几个cpu周期,因为sql server解析你的语句,但我不认为它会产生显着的差异