Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择*sql查询与选择特定列sql查询_Sql_Mysql_Ruby On Rails_Database Design_Activerecord - Fatal编程技术网

选择*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列是一个例子,我对一般问题给出了一般性的回答。