是什么原因导致选择*的时间增加?

时间:2012-06-11 05:33:58

标签: mysql sql

当我这么做时,我注意到对包含大量列的表的一些查询:

SELECT column1, column2 FROM ...

它几乎是我做的时间的2倍:

SELECT * FROM ... # ~ 15 columns

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

要做的第一件事是查看“解释计划”,看看一个查询是否会产生与另一个查询不同的查询计划:

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

答案 2 :(得分:0)

...鉴于

  1. SELECT column1, column2 FROM yourtable
  2. SELECT * FROM yourtable
  3. MySQL性能可以通过多个因素进行更改,例如

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

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

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

相关问题