【问题标题】:MySQL select performance [duplicate]MySQL选择性能[重复]
【发布时间】:2011-08-27 20:22:42
【问题描述】:

可能重复:
Which is faster/best? SELECT * or SELECT column1, colum2, column3, etc

我有一个关于 MySQL 性能的问题。在开始之前,对不起我的英语不好。

问题是:星号和逗号分隔的字段名称之间的性能差异是什么。

例如:a 有一个名为“example_table”的表和 5 个字段“f1, f2, f3, f4, f5”。

select * from `example_table`;

select f1, f2, f3, f4, f5 from `example_table`;

感谢您的回复。

【问题讨论】:

  • 我知道这是一个骗局,但似乎 SO 不允许您搜索 *
  • 我的同事,在数据库管理方面比我好得多,总是告诉我不要使用SELECT *,因为它比显式需要的字段要花费很多时间...

标签: mysql performance


【解决方案1】:

如果您选择所有字段,则不会有可衡量的性能差异。

这提高了代码的可读性,因为您确切地知道查询将返回哪些字段。

如果您不选择所有字段,则第二种形式的性能会稍好一些,因为 MySQL 在网络上发送的数据较少。

如果表包含 TEXT 或 BLOB 列并且您不询问这些列,这也可能导致磁盘读取次数减少。这些类型不直接存储在行中,因此可以避免一些额外的磁盘读取。

不过,如果您选择所有字段,则不会有明显的性能差异。

【讨论】:

  • OP 正在讨论在 SELECT * 和明确选择所有列之间进行选择的情况。
【解决方案2】:

这个查询的执行不会有性能差异;这两个查询是等价的。两者都选择表中的所有列。

解析第二个查询可能需要额外的纳秒时间,因为要解析的字符更多,但这不会造成任何显着(甚至可测量)的差异。

但是,请考虑如果稍后将额外的列添加到表中会发生什么。如果原始查询中不需要此列,则仍将在查询中投影并传输到调用应用程序。这确实可能会在应用程序中造成可测量的减速。因此,仍然建议只选择您需要的列。 (如果您正在编写代码来显示整个数据库表,那么* 将是合适的,因为手头的任务“获取表中的所有列。”)

【讨论】:

  • 我认为 @arnaud576875 是正确的,如果一个表包含许多字段并且用户只需要一些......
  • 他在那个场景中是对的,但这不是 OP 所要求的场景。
  • 哦,你是对的,我没有注意到 example_table 正好有五个字段。好的,所以你是对的!!! :)
猜你喜欢
  • 2013-04-23
  • 2016-12-10
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 2015-09-09
相关资源
最近更新 更多