0

我想创建一个数据库视图,其中包含一些需要计算的昂贵字段。如果不需要昂贵的字段,我想看看成本是多少。但是,我发现情况并非如此,而且成本是相同的。

作为玩具示例,我有一个包含用户信息的表格。我在这张表上有一个视图,它返回 id、name 和名称与我相似的用户数。

create view same_name as 
select  
       id,
       name,
       (select count(*) from users as u2 where u2.name = u1.name) as same_name_count,
       from users as u1;

我现在正在对表进行两次查询。在第一个中,我选择了所有字段,在第二个中,我只选择了单个字段(名称)。在两者中,我都限制了 id。

mysql> select * from same_name where id = 2;
+----+--------+-----------------+
| id | name   | same_name_count |
+----+--------+-----------------+
|  2 | meidan |             125 |
+----+--------+-----------------+
1 row in set (12.15 sec)

mysql> select name from same_name where id = 2;
+--------+
| name   |
+--------+
| meidan |
+--------+
1 row in set (12.15 sec)

所以可以看出性能是一样的,这里对缺失的字段没有做任何优化。这是预期的行为吗?对此有任何提示吗?

谢谢。

4

1 回答 1

0

大多数 CPU 周期都浪费在了行的选择和计算上(这两种情况都是一样的),而不是数据传输本身。如果表中的每一行不占用几千字节的数据,而不是name字段中的几个字节,那么在快速网络连接上您不会看到太大的差异。

于 2013-07-10T18:41:55.553 回答