当需要 View 字段的子集时,mysql View 性能

标签 mysql database-performance

我想创建一个数据库 View ,其中有一些需要计算的昂贵字段。我想看看如果不需要昂贵的字段,成本是多少。然而,我发现事实并非如此,并且成本是相同的。

作为玩具示例,我有一个包含用户信息的表。我在这个表上有一个 View ,它返回 id、名称以及与我名称相似的用户数量。

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)

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

谢谢。

最佳答案

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

关于当需要 View 字段的子集时,mysql View 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17578348/

相关文章:

mysql - SQL 子查询 IN SELECT [Symfony3]

mysql - 对大量数据使用像JSON_EXTRACT这样的SQL函数好不好

java - jstatd,找不到命令 CentOS 7

java - 查询计算与编程计算

mysql - 如何改进索引以便在毫秒内执行查询?

php - 学说 DQL : DQL Join between 4 entities

php - 制作条件语句以发送电子邮件警报

php - 如何在mysql中显示所需的列?

mysql - 为什么sql IN运算符无法正常工作?

mysql - 在 MySQL(InnoDB)中删除和插入需要很长时间