【问题标题】: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。)

【问题讨论】:

  • 您是否正在运行如此大的操作,以至于您节省的几微秒值得更改代码的努力?
  • 两种方法都试过了吗?对其进行基准测试并告诉我们。
  • 我确定这是 stackoverflow 上 10 个最常见的问题之一。
  • 我的问题与“select * vs select column”没有重复,因为该问题是关于选择所有列的子集的区别。

标签: sql sql-server


【解决方案1】:

与其说是速度,不如说是可维护性...

如果您的应用程序专门请求列,并且表结构发生变化(列被删除或重命名),那么语句将在运行时中断,从而准确指出问题所在。

select * 在结构更改后仍然有效,但可能会在以后的应用程序中导致更难以追踪的更微妙的问题。

这是一项额外的前期工作,但为了可维护性更好地显式列出列。

假设where子句参数化,SQL只解析一次,之后应该在语句缓存中,执行速度不会有太大差别。

【讨论】:

    【解决方案2】:

    作为一种好的做法,最好在 select 语句本身中包含列名。因为表的结构将来可能会发生变化,你会提取不需要的数据..

    性能方面

    当您使用 select * 时,sql server 编译器必须将 * 替换为列名,这是一项额外的任务,但我认为可以忽略不计

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 2011-09-02
      • 2010-09-20
      相关资源
      最近更新 更多