【发布时间】:2011-06-28 13:54:29
【问题描述】:
可能是一个数据库 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 应用程序。
【问题讨论】:
-
你是拥有1000万条记录表的人;你能得到比你的基准多多少的真实生活?
-
我正在迁移到 Rails。我无权访问当前的作品。从技术上讲,我现在没有数据。
-
@Jeff O 我希望你能获得点赞评论。这条评论说明了一切。
-
@p.campbell 等人:触发愉快的收官 - “重复”问题太笼统了,这个问题具有特定结构和卷以及特定 RDBMS (MySQL) 的特定场景。更不用说应用程序框架(Ruby)了。这个问题可以得到一个非常详细的具体答案
-
@p.c 我不同意。问题不是关于可维护性、健壮性、标准、(反)模式 - 它只是简单地放在
Which approach is faster for data retrieval?周围(C 领域)还有其他问题关于最快的方式来做某事,答案可能是 ASM(不漂亮C)这将是正确的答案。链接的“重复”正在讨论粗略的理论和最佳实践。
标签: sql mysql ruby-on-rails database-design activerecord