当我这么做时,我注意到对包含大量列的表的一些查询:
SELECT column1, column2 FROM ...
它几乎是我做的时间的2倍:
SELECT * FROM ... # ~ 15 columns
返回*
查询所需的额外时间是什么原因?我最初认为如果两个查询都检索相同的行,那么性能上的差异将是微不足道的。是什么导致了这种差异?
答案 0 :(得分:7)
虽然行数相同,但需要将其他列传输到客户端,从而消耗网络带宽。需要额外的时间是出于同样的原因,为什么下载七倍大的文件需要更长的时间。可能还需要从磁盘中读取可能不需要的块,并且在某些情况下甚至无法通过仅从索引读取来完成查询。这就是为什么我们鼓励您明确指定您的选择列表。
答案 1 :(得分:2)
要做的第一件事是查看“解释计划”,看看一个查询是否会产生与另一个查询不同的查询计划:
http://dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html
答案 2 :(得分:0)
...鉴于
SELECT column1, column2 FROM yourtable
SELECT * FROM yourtable
MySQL性能可以通过多个因素进行更改,例如
......还有一些。在尝试确定哪种方式更快时,您必须考虑所有这些因素。
在大多数情况下,我只查询我想要的列,从而减少应用程序和数据库服务器之间不必要的传输负载。但是......我必须承认,如果它只是几列,或者我想测试一些东西,我有时也会使用SELECT *
- 快捷方式。