选择 * sql 查询与选择特定列 sql 查询

11 浏览
0 Comments

选择 * sql 查询与选择特定列 sql 查询

可能是一个重复的问题。

我们的应用程序有一个如下的表:

表 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应用。

0
0 Comments

在SQL查询中,使用"Select *"语句会返回表中的所有列,而使用"Select specific columns"语句则会返回指定的列。这两种查询方式之间存在一些差异和问题。

使用"Select *"语句的问题:

1. 网络传输和数据库处理的数据量较大,导致查询速度较慢。

2. 数据库需要额外的工作来确定返回的列,增加了数据库的负担。

3. 如果表的结构发生重大变化,"Select *"语句可能会返回错误的结果。

4. 如果某人重新排列了列的顺序,"Select *"语句可能会显示不希望用户看到的字段。

5. 如果从数据中进行插入操作,可能会将数据放入错误的列中。

解决方法:

1. 尽量避免在生产代码中使用"Select *"语句,而是使用"Select specific columns"来明确指定需要返回的列。

2. 根据实际需求,只选择需要的列,减少数据的传输和处理量,提高查询性能。

3. 对于可能发生结构变化的情况,使用"Select specific columns"可以避免返回错误的结果。

4. 对于可能重新排列列顺序的情况,使用"Select specific columns"可以确保显示正确的字段。

5. 在插入数据时,根据列的顺序使用"Select specific columns"可以确保数据被正确地放入对应的列中。

总结:

在SQL查询中,使用"Select specific columns"而不是"Select *"可以减少数据量和数据库负担,提高查询性能,并避免可能出现的错误结果和字段显示问题。因此,尽量避免在生产代码中使用"Select *"语句,而是使用"Select specific columns"来明确指定需要返回的列。

0
0 Comments

选择特定列的SQL查询与选择所有列的SQL查询相比,可能会更快。这是因为选择特定列的查询可以使用一个包含这些列的覆盖索引,在查询性能方面可能会有更好的结果。

覆盖索引是一个只包含特定列的索引,它可以提供更快的查询速度。当查询只需要这些列时,数据库引擎可以直接从索引中获取数据,而不需要去访问表中的其他列,从而减少了磁盘读取的次数和数据的传输量。这样可以大大提高查询的性能。

当然,使用覆盖索引也有一些缺点。首先,维护覆盖索引的成本相对较高,因为它需要在每次更新表数据时更新索引。其次,覆盖索引只适用于那些经常被查询但很少被更新的表。如果表的更新频率较高,使用覆盖索引可能会导致性能下降。

因此,在选择是否使用覆盖索引时,需要权衡查询频率和更新频率。如果查询的次数远远超过更新的次数,那么即使维护成本较高,使用覆盖索引仍然是值得的。但如果更新频率较高,那么使用覆盖索引可能会导致性能下降,因此需要谨慎考虑。

总之,选择特定列的SQL查询可以通过使用覆盖索引来提高查询性能。然而,使用覆盖索引也需要考虑更新成本和查询频率与更新频率之间的权衡。根据具体情况选择是否使用覆盖索引可以帮助优化查询性能。

0