我听说在编写SQL命令时使用SELECT *通常是不好的做法,因为选择您特别需要的列会更有效。
如果我需要选择表中的每一列,我应该使用
SELECT * FROM TABLE
or
SELECT column1, colum2, column3, etc. FROM TABLE
在这种情况下,效率真的重要吗?如果你真的需要所有的数据,我认为SELECT *在内部会更优,但我这么说并没有真正理解数据库。
我很好奇在这种情况下最好的做法是什么。
更新:我可能应该指定,我真正想要执行SELECT *的唯一情况是,当我从一个表中选择数据时,我知道总是需要检索所有列,即使添加了新列。
然而,鉴于我所看到的反应,这似乎仍然是一个坏主意,由于我曾经考虑过的许多技术原因,SELECT *不应该被使用。
当且仅当需要获取所有字段的数据时,使用显式字段名并不比使用*更快。
你的客户端软件不应该依赖于返回字段的顺序,所以这也是毫无意义的。
而且有可能(尽管不太可能)需要使用*获取所有字段,因为您还不知道存在哪些字段(考虑非常动态的数据库结构)。
使用显式字段名的另一个缺点是,如果字段名很多而且很长,那么阅读代码和/或查询日志就会更加困难。
所以规则应该是:如果你需要所有的字段,使用*,如果你只需要一个子集,显式命名它们。
就性能而言,我看到的评论说两者是相等的。但是在可用性方面有一些+和-
当您在查询中使用(select *)时,如果有人更改了表并添加了前一个查询不需要的新字段,这是不必要的开销。如果新添加的字段是一个blob或图像字段怎么办??您的查询响应时间将会非常慢。
另一方面,如果你使用一个(select col1,col2,..),如果表被修改并添加了新的字段,如果结果集中需要这些字段,你总是需要在表修改后编辑你的选择查询。
但我建议总是使用select col1 col2…在你的查询和修改查询,如果表改变以后…