“select *”和所有列的选择之间是不是存在速度差异? [复制]
Posted
技术标签:
【中文标题】“select *”和所有列的选择之间是不是存在速度差异? [复制]【英文标题】:Is there a speed difference between "select *" and a select with all columns? [duplicate]“select *”和所有列的选择之间是否存在速度差异? [复制] 【发布时间】:2012-09-26 05:37:58 【问题描述】:可能重复:select * vs select column
假设有一个有 20 列的表。 select *
和明确包含所有 20 列的选择之间是否存在速度差异?
如果没有区别,您有什么建议?我应该使用懒惰的select *
还是应该为每列创建一个查询字符串?
(如果有什么不同:我使用 SQL Server。)
【问题讨论】:
您是否正在运行如此大的操作,以至于您节省的几微秒值得更改代码的努力? 两种方法都试过了吗?对其进行基准测试并告诉我们。 我确定这是 *** 上 10 个最常见的问题之一。 我的问题与“select * vs select column”没有重复,因为该问题是关于选择所有列的子集的区别。 【参考方案1】:与其说是速度,不如说是可维护性...
如果您的应用程序专门请求列,并且表结构发生变化(列被删除或重命名),那么语句将在运行时中断,从而准确指出问题所在。
select * 在结构更改后仍然有效,但可能会在以后的应用程序中导致更难以追踪的更微妙的问题。
这是一项额外的前期工作,但为了可维护性更好地显式列出列。
假设where子句参数化,SQL只解析一次,之后应该在语句缓存中,执行速度不会有太大差别。
【讨论】:
【参考方案2】:作为一种好的做法,最好在 select 语句本身中包含列名。因为表的结构将来可能会发生变化,你会提取不需要的数据..
性能方面
当您使用 select * 时,sql server 编译器必须将 * 替换为列名,这是一项额外的任务,但我认为可以忽略不计
【讨论】:
以上是关于“select *”和所有列的选择之间是不是存在速度差异? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Google BigQuery:具有重复名称的联接表的所有列的前缀