【问题标题】:Production Perfomance of using SELECT * statements?使用 SELECT * 语句的生产性能?
【发布时间】:2013-08-11 14:08:37
【问题描述】:

为什么在生产代码中使用SELECT * 被认为是不好的做法? 是否有任何替代方案可以在生产中使用,还是我们需要单独 SELECT 表中的每一列?

【问题讨论】:

标签: sql performance tsql ssis sql-server-2008-r2


【解决方案1】:

[*] 正在有效地选择所有列。但由于选择所有列意味着获得大量数据,我会说只选择您真正需要的列更好。

例如,您可能不需要获取所有 id 列或时间戳或更新日期等。但您可能想要获取产品描述或客户名称。但即便如此,您也可能不需要每次都获取所有内容。

【讨论】:

    【解决方案2】:

    如果您确实需要正在进行的数据库调用中的每一列,那么应该不会对性能产生影响。

    如果您经常使用 SELECT * ... 并且只使用一两列,那么这是重构您的 SELECT 语句的位置,因为当您只对一两列感兴趣时,它将返回所有列。

    在我看来,选择列名还可以更轻松地阅读和修改现有 SQL。

    【讨论】:

      【解决方案3】:

      使用SELECT * 是一种不好的做法,原因有几个,至少在 SSIS 的上下文中是这样。

      如果您不需要所有列,则选择所有列是浪费内存,而内存是使 SSIS 快速运行(或不运行)的魔力。

      选择所有列,如果您不需要所有列,将阻止 SQL Server 使用索引更快地将数据返回给您。

      SSIS 非常依赖元数据。因此,如果您将SELECT * 作为您的源,如果将一列添加到表中,则您的源定义已更改,并且您的包可能会失败,因为元数据不再一致。

      【讨论】:

      • 您确定选择星号会阻止使用索引吗?我进行了测试,它并没有杀死我对索引的使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      相关资源
      最近更新 更多