当只需要`field`时,什么是更快的SELECT *或SELECT`field`

时间:2010-11-17 10:15:38

标签: sql mysql

我不想在这里假设,我以前被咬过/证明错了。

任何帮助将不胜感激

7 个答案:

答案 0 :(得分:15)

SELECT字段比select *。

因为如果表中有超过1个字段/列,那么选择*将返回所有这些字段/列,这需要网络带宽对数据库的更多工作获取所有其他字段。但是,如果您只需要一个字段/列,则数据库负载较少,并且不需要传输不需要的信息,因此无需占用带宽资源。

答案 1 :(得分:5)

继@ AntionoP的回答之后,使用SELECT field的另一个好处是,如果字段被索引,MySQL可以直接从索引返回值,而无需查找数据行来获得结果。

答案 2 :(得分:4)

Select *据说比select <field list>慢,因为*需要额外的查找来获取所有列。
此外,如果该表包含更多列(您不感兴趣),为什么只让它们忽略它们?

答案 3 :(得分:2)

选择* 将检索所有可能非常大的列,特别是如果你有blob。 黄金法则是选择您需要的字段。

答案 4 :(得分:2)

答案 5 :(得分:1)

既然你提到了mysql,我只是测试了“SELECT field”是更快的。你为什么不自己测试一下呢?

在Linux上:

time (echo "SELECT * FROM table" | mysql -u username --password=passwd database > /dev/null)

time (echo "SELECT field FROM table" | mysql -u username --password=passwd database > /dev/null)

答案 6 :(得分:1)

在嵌套查询中使用SELECT *时,查询优化器有时会删除您在后续查询中不使用的字段。所以在那种情况下无所谓。但是你相信MySQL的查询优化器吗?确定SELECT *是否不向查询计划添加不必要字段的唯一方法是直接比较两个查询计划,方法是使用EXPLAIN (..query..)输出它们。

也就是说,确实确保最简单的方法就是不在生产查询中使用SELECT *