选择* sql query vs选择特定列sql查询

可能重复:
为什么SELECT *被认为有害?

可能是一个数据库nOOb问题。

我们的应用程序有如下表格

表WF

Field | Type | Null | Key | Default | Extra | +--------------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | children | text | YES | | NULL | | | w_id | int(11) | YES | | NULL | | | f_id | int(11) | YES | | NULL | | | filterable | tinyint(1) | YES | | 1 | | | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | | NULL | | | status | smallint(6) | YES | | 1 | | | visible | tinyint(1) | YES | | 1 | | | weight | int(11) | YES | | NULL | | | root | tinyint(1) | YES | | 0 | | | mfr | tinyint(1) | YES | | 0 | | +--------------------+-------------+------+-----+---------+----------------+ 

该表预计将超过一千万条记录。 架构预计不会发生太大变化。 我需要检索列f_id,children,status,visible,weight,root,mfr。

哪种方法更快地进行数据检索?

1) Select * from WF where w_id = 1 AND status = 1;

我将剥离应用程序层中不必要的列。

2) Select children,f_id,status,visible,weight,root,mfr from WF where w_id = 1 AND status = 1;

无需在查询中预先选择不必要的列。

有没有人有一个真实的生活基准,哪个更快。 我知道有些人说Select *是邪恶的,但是在尝试获取整个块而不是检索选择性列时,MySQL会更快地响应吗?

我使用的是MySQL版本:5.1.37-1ubuntu5(Ubuntu),应用程序是Rails3应用程序。

作为包含列子集的select语句如何显着更快的示例,它可以在表上使用仅包含那些列的覆盖索引,从而可能导致更好的查询性能。

如果返回的列数较少,则通过网络传输的数据较少,数据库处理的数据较少,并且几乎总是返回更快。 使用select *数据库也往往会变慢,因为数据库必须弄清楚列是什么,因此比指定时做更多的工作。 如果结构发生显着变化,进一步选择*通常会返回不良结果。 它最终可能会显示您不喜欢的用户字段;或者希望他们看到或者有人傻到重新排列列,然后应用程序实际上可能显示错误的顺序或者从数据中插入,放入他们在错误的栏目中。 在生产代码中使用selct *几乎是一种不好的做法。