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