2

我注意到有很多列的表的一些查询,当我这样做时:

SELECT column1, column2 FROM ...

它几乎可以是我做的速度的 2 倍:

SELECT * FROM ... # ~ 15 columns

是什么导致了返回查询所需的额外时间*?我最初认为,如果两个查询都检索相同的行,那么性能差异将是微不足道的。造成这种差异的原因是什么?

4

3 回答 3

7

虽然行数相同,但额外的列需要传输到客户端,消耗网络带宽。需要额外时间的原因与下载 7 倍大的文件需要更长时间的原因相同。可能还需要从磁盘读取原本不需要的块,在某些情况下甚至无法通过仅从索引读取来完成查询。这就是为什么我们鼓励您始终明确指定您的选择列表。

于 2012-06-11T05:45:41.257 回答
2

首先要做的是查看“解释计划”,看看一个查询是否会导致与另一个不同的查询计划:

http://dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html

于 2012-06-11T05:37:19.620 回答
0

鉴于...

  1. SELECT column1, column2 FROM yourtable
  2. SELECT * FROM yourtable

MySQL 的性能可以通过不止一个因素来改变,例如

  • 将数据发送回客户端,
  • 释放物品,
  • 锁定表,
  • 检查查询缓存,
  • 将结果存储到查询缓存中,
  • 优化,
  • 打开和关闭表格

……还有更多。在尝试确定哪种方式更快时,您必须考虑所有这些因素。

在大多数情况下,我只查询我想要的列,从而减少应用程序和数据库服务器之间不必要的传输负载。但是...我不得不承认,如果它只有几列,或者如果我想测试一些东西,我有时也会走SELECT *- 捷径。

于 2012-06-11T06:01:02.393 回答