pap*_*del 5 mysql sql activerecord database-design ruby-on-rails
可能重复:
为什么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 | |
+--------------------+-------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
该表预计将超过一千万条记录.模式预计不会发生太大变化.我需要检索列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 * 几乎是一种糟糕的做法。
| 归档时间: |
|
| 查看次数: |
8140 次 |
| 最近记录: |