假设有一个包含20列的表。 select *
和明确包含所有20列的选择之间是否有任何速度差异?
如果没有差异,你会建议什么?我应该使用惰性select *
还是应该为每列创建一个查询字符串?
(如果它有任何区别:我使用SQL Server。)
答案 0 :(得分:1)
与速度无关,但可维护性......
如果您的应用程序专门请求列,并且表结构发生更改(列已删除或重命名),则语句将在运行时中断,从而准确指出问题所在。
select *在结构更改后仍然有效,但是稍后可能会在应用程序中导致更难以追踪的更微妙的问题。
这是前期的额外工作,但更好的可维护性以明确列出列。
假设where子句是参数化的,那么SQL只被解析一次,并且应该在语句缓存之后,执行速度不会太大。
答案 1 :(得分:0)
作为一种好的做法,最好在select语句本身中包含列名。因为表的结构将来可能会发生变化,所以你会提取不需要的数据..
表现明智
当你使用select *时,sql server编译器必须用列名替换*,这是一个额外的任务,但我认为这是微不足道的