“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 *”和所有列的选择之间是不是存在速度差异? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在R中选择具有公共标记的所有列?

SQL:语句小记

Google BigQuery:具有重复名称的联接表的所有列的前缀

选择将同一列的所有行数据放入一列

SQL server select语句用于选择另一列的重复条目的ID

MSSql - 选择语句不适用于所有列