选择*sql查询与选择特定列sql查询
可能重复:选择*sql查询与选择特定列sql查询,sql,mysql,ruby-on-rails,database-design,activerecord,Sql,Mysql,Ruby On Rails,Database Design,Activerecord,可能重复: 可能是个数据库问题 我们的应用程序有一个如下表 表WF Field | Type | Null | Key | Default | Extra | +--------------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | aut
可能是个数据库问题 我们的应用程序有一个如下表 表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 | |
+--------------------+-------------+------+-----+---------+----------------+
该表预计将超过1000万条记录。该模式预计不会有太大变化。我需要检索f_id、children、status、visible、weight、root、mfr列
哪种方法检索数据更快
1) 从WF中选择*,其中w_id=1,status=1代码>
我将剥离应用程序层中不必要的列
2) 从WF中选择子项、f_id、状态、可见、重量、根、mfr,其中w_id=1,状态=1代码>
不需要将不必要的列作为其在查询中的预选列进行剥离
有没有人有一个现实生活中的基准,哪一个更快。我知道有人说Select*是邪恶的,但是MySQL在尝试获取整个区块时会比检索选择性列更快响应吗
我使用的是MySQL版本:5.1.37-1ubuntu5(Ubuntu),应用程序是Rails3应用程序。如果返回的列数较少,则需要通过网络传输的数据较少,需要数据库处理的数据也较少,而且几乎总是返回得更快。使用select*时,数据库的速度也会变慢,因为数据库随后必须找出列是什么,从而比指定时做更多的工作。如果结构发生显著变化,进一步选择*通常会返回错误结果。它可能会显示您不需要的用户字段;I don’我不想让他们看到,或者如果有人愚蠢地重新排列了列,那么应用程序实际上可能会以错误的顺序显示内容,或者如果从数据中进行插入,则将它们放在错误的列中。在生产代码中使用selct*几乎是一种糟糕的做法 例如,包含列子集的select语句可以大大加快速度,它可以在只包含这些列的表上使用覆盖索引,这可能会导致更好的查询性能。您就是拥有1000万记录表的人;你能得到比基准多多少的真实生活?我正在迁移到Rails上。我无法获得当前的产品。从技术上讲,我现在没有数据。@Jeff O我希望你能得到评论和投票的分数。这句话说明了一切。@p.campbell等人:触发快乐闭门器-这个“重复”问题太笼统了,这个问题有一个特定的场景,具有特定的结构和卷以及特定的RDBMS(MySQL)。更不用说应用程序框架(Ruby)。对此,可以得出非常详细的具体答案question@p.c我不同意。问题并不是关于可维护性、健壮性、标准、(反)模式,而是简单地说哪种方法对数据检索更快?
围绕(C竞技场)还有其他关于最快做事方式的问题,答案可能是ASM(而不是漂亮的C),这将是正确的答案。链接的“副本”正在讨论概括的理论和最佳实践。投票支持提及覆盖指数。我来这里是想说的。谢谢,我得到了关于覆盖索引的jist。@papdel此查询的覆盖索引将占用8(共12)列,并且维护成本非常高(相对度量)。我对突如其来的反弹感到太激动了@Richard,这取决于插入与查询的比率。如果查询的数量远远超过插入的数量,那么即使是12个覆盖索引中的8个也是值得的。另外,12列中的8列是一个例子,我对一般问题给出了一般性的回答。