【问题标题】:Why Select * is faster than Select [FieldName] from table为什么 Select * 比 Select [FieldName] from table 快
【发布时间】:2014-05-29 04:02:45
【问题描述】:

我在这里遇到了一个奇怪的情况。 我有一个复杂的查询,大约需要 10 秒才能从数据库中检索大约 6000 行。

查询版本 1:

SELECT * from ..... 

在上述版本中,从数据库中获取 6000 行大约需要 10 秒(我说的是在 SQL 管理工作室中运行查询)

查询版本 2:

SELECT [FieldName1], [FieldName2] from .....

在上面的版本(2)中,从数据库中获取结果(6000行)需要一个多小时甚至更长的时间(我说的是在SQL管理工作室中运行查询)

两个查询具有相同的连接和 where 条件。

有人能解释一下吗?

谢谢。

问候, 纳扬

【问题讨论】:

  • 我不知道 sql-server,但我假设您可以通过某种方式检查查询计划。这两者的计划有区别吗?
  • 您可能想看看这个问题的公认答案:stackoverflow.com/questions/3180375/select-vs-select-column
  • 是的。从做基线工作开始,为我们提供两种场景的 ESTIMATED 和 EXECUTED 查询计划。
  • 我也观察到了这一点(许多版本的 SQLServer 引擎都回来了)。
  • 我认为对于“select *”SQL 在查询计划的某处使用全表扫描,对于“选择少数字段”它会尝试使用索引并以某种方式搞砸查询计划;慢速磁盘子系统可能“有帮助”。有时,相关表的(完整)统计信息更新会有所帮助。就像许多其他人所说的那样,看看查询计划。

标签: sql sql-server tsql


【解决方案1】:

我想您可能是从视图而不是表中检索数据。在这种情况下,可以想象正在使用的计划可能效率较低。

但是,在“正常”使用中,您 SELECT来自表(而不是视图或函数)

您应该永远期望使用列名而不是 * 会显着降低性能,并且您应该始终更喜欢明确的列名而不是 * 用于非谓词 SELECT s

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 2018-12-28
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2014-12-12
    • 2011-04-06
    • 2014-12-02
    相关资源
    最近更新 更多