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

Mysql 选择*时增加的时间是什么原因?,mysql,sql,Mysql,Sql,我注意到,在对具有许多列的表进行的一些查询中,当我这样做时: SELECT column1, column2 FROM ... SELECT * FROM ... # ~ 15 columns 它的速度几乎是我的2倍: SELECT column1, column2 FROM ... SELECT * FROM ... # ~ 15 columns 返回*查询所需的额外时间是什么原因?我最初认为,如果两个查询都检索相同的行,那么性能上的差异将是微不足道的。是什么导致了这种差异?首先要做的

我注意到,在对具有许多列的表进行的一些查询中,当我这样做时:

SELECT column1, column2 FROM ...
SELECT * FROM ... # ~ 15 columns
它的速度几乎是我的2倍:

SELECT column1, column2 FROM ...
SELECT * FROM ... # ~ 15 columns

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

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


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

给定

  • 从表格中选择第1列、第2列
  • 从表格中选择*
  • 例如,MySQL性能可以由多个因素改变

    • 将数据发送回客户端
    • 释放物品
    • 锁定桌子
    • 检查查询缓存
    • 将结果存储到查询缓存中
    • 优化,
    • 打开和关闭表格
    。。。还有一些。在确定哪种方式更快时,您必须考虑所有这些因素

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