【发布时间】:2011-04-07 20:08:11
【问题描述】:
我一直向我的开发人员宣传 SELECT * 是邪恶的,应该像瘟疫一样避免。
有没有可以证明的情况?
我不是在谈论 COUNT(*) - 大多数优化人员都能弄清楚。
编辑
我说的是生产代码。
我看到的这种不良做法的一个很好的例子是一个遗留的 asp 应用程序,它在存储过程中使用select *,并使用ADO 循环返回的记录,但按索引获取列。您可以想象在字段列表末尾以外的位置添加新字段时会发生什么。
【问题讨论】:
-
需要提取所有字段的时候有什么问题?
-
“有什么问题” 你永远不知道你会得到什么。或者按什么顺序。在编程中,您通常需要可预测的结果。
-
是的,也许有人可以解释为什么 select * 不好?我当然不是 DBA,但是当 * 也能正常工作时,写出一大串列名似乎毫无意义。
-
@annakata:我怀疑“你永远不应该写 SQL”这样的答案会得到铁杆 SQL 程序员的青睐;-)
-
@kemp,您正在用一分钟的额外工作换取所有用户的数小时性能下降,只是懒惰不列出这些列。即使列出所有列,每个 select * 都比列出列的 select 花费更长的时间。每个带有内部连接的 select * 返回数据,您显然不需要浪费服务器和网络资源。如果对每个查询都执行此操作,则会导致难以修复的巨大性能问题。在大多数数据库中,您无论如何都可以将它们拖过来,那有多难?