哪个更快:“SELECT * FROM table”还是“SELECT x,y,q FROM table”(来自一个有4个字段的表)

5
我想知道什么方法对于数据库来说是最快的(或者最轻的)。
假设数据库表有4个字段:x,y,z,q。
我只需要3个:x,y,q。
使用PHP,数据库执行查询的最快/最容易的方法是什么:"SELECT * FROM table" 还是 "SELECT x,y,q FROM table"?
如果表格有5个或更多字段,而我仍然只需要选择3个,是否也适用相同的方法?

从最基本的逻辑出发。你有一个装有不同种类球的袋子。有人想打篮球和排球。你可以只拿出篮球和排球,把其余的留在袋子里。或者你可以将整个袋子倒出来,取出篮球和排球分发,然后让其余的散落在地上。哪种方式更容易呢? - ASertacAkkaya
3个回答

10

使用 SELECT x,y,z FROM table 更快,因为 MySQL 在执行查询之前不必查找表中有哪些列。


4
如果这些列被索引了,它甚至不需要从表本身读取... - eggyal
好的。在我脑海中,让mysql选择所有内容似乎更容易,而不是具体指定(并让mysql搜索/排序这些字段)。 - mowgli
2
它仍然需要查找列以验证x、y、z是否为该表的有效列。 - user330315

3

在大多数数据库中,使用*比指定字段要慢。

即使有很多列,将所有列都放入也是一种良好的编程实践。


3
出于以下几个原因,这是一个好的做法:1)它更好地识别了你从查询结果中实际使用的数据,2)如果将来有人向表中添加了200个额外的列,由于“*”将检索所有列的数据,你将突然处理多达200倍的数据传输量,即使他们的工作与你的查询无关,也会影响你的性能。基本上,这是最小访问权限或最小特权原则(http://en.wikipedia.org/wiki/Principle_of_least_privilege)。 - Peter M

3

SELECT x,y,q FROM table总是比select *更快,因为您不需要读取所有字段,但是要注意的是,SELECT x,y,q,z FROM tableselect *在性能上会产生相同的影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接