在 MySQL 中创建视图需要多长时间? [复制]

Posted

技术标签:

【中文标题】在 MySQL 中创建视图需要多长时间? [复制]【英文标题】:How long does it take to create a view in MySQL? [duplicate] 【发布时间】:2020-11-27 01:05:03 【问题描述】:

原始表,它看起来像这样。

TIME                 | NAME       | VALUE
---------------------+------------+--------
2020-11-26 11:12:13  |  Alice     | 10.51
2020-11-26 11:13:13  |  Bob       | 12.54
2020-11-26 11:14:13  |  Cary      | 13.53
2020-11-26 11:17:13  |  David     | 14.54
2020-11-26 12:12:13  |  Alice     | 11.4
2020-11-26 12:13:13  |  Bob       | 12.5
2020-11-26 12:14:13  |  Cary      | 30.12
2020-11-26 12:17:13  |  David     | 4.04
.....

但是数据数量很多,可能超过1亿。它现在保存数据。

我想按天计算平均值。像这样。

DAY            | Alice  | Bob   | Cary   | David
---------------+--------+-------+--------+------
2020-11-26     | 10.955 | 12.52 | 21.825 | 9.29
2020-11-27     | ....

我有 SQL 用于按天获取平均值,但它花费了太多时间。

SELECT          
    date_format(TIME, '%Y-%m-%d') AS 'DATE',
    AVG(CASE WHEN  'Alice' THEN VALUE END) AS 'Alice',
    AVG(CASE WHEN  'Bob' THEN VALUE END) AS 'Bob', 
    AVG(CASE WHEN  'Cary' THEN VALUE END) AS 'Cary', 
    AVG(CASE WHEN  'David' THEN VALUE END) AS 'David'
FROM data_log
GROUP BY DAY(TIME);

它花了 20 秒,当我想得到一天。当我得到两天时,花 20 分钟。

所以我创建视图以按天获取平均值并选择视图。

我的问题是

每次将数据存储在原始表中时,视图是否会自行更新?

选择视图是否花费了很多时间?

原始表已经有超过 1 亿条数据。创建视图是否花费大量时间?

【问题讨论】:

【参考方案1】:

视图只存储查询的代码。当您访问视图时,所有内容都需要重新计算。

因此,普通视图不会比查询本身更快。

一些数据库支持物化视图。这些与常规视图不同,因为存储的数据是预先计算好的。但是,mysql 不支持物化视图。

如果您只需要一天的数据,请使用 WHERE 子句将数据限制在该天运行原始查询。

【讨论】:

以上是关于在 MySQL 中创建视图需要多长时间? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 数据库中创建视图有啥好处? [复制]

在 MySQL 中创建视图并将行转换为列

在 MySql 中创建一个或多个视图的 UNION

需要在 Impala 中创建一个 Un-Pivots、Pivo​​ts 和 Union 的视图

创建一个 MYSQL 存储过程以在不同的数据库中创建表

如何找到在 MySQL 中创建视图的 SQL 语句?