一步一个脚印,一天一道面试题。
物化视图概念
物化视图,顾名思义,是将一个查询的结果预先计算并存储为物理表的形式。这意味着,原本需要在运行时动态执行的复杂查询,现在变成了直接从已经计算好的结果表中读取数据,极大地提升了查询速度。它是一种典型的"空间换时间"的策略,牺牲一定的存储空间来换取查询性能的显著提升。
优点
- 自动维护:Doris自动维护物化视图的数据,无论基础表有新的数据导入还是删除操作,都能确保物化视图与基础表的数据保持一致,无需人工干预。(方便,减少人工)
- 查询优化 :查询时,Doris能够自动匹配最优的物化视图,并直接从该视图中读取数据,从而跳过不必要的计算步骤,加快查询速度。
- 资源优化 :通过物化视图,可以将计算密集型的操作在数据加载时完成,减少了计算资源消耗。
建议使用场景
- 存储占用小 :这不是必须的,但由于物化视图是需要占用存储空间的,是"空间换时间"的典型,所以尽量使用较少的列(少于10列)。
- 复杂查询加速 :对于包含多表JOIN或复杂聚合函数的查询,通过预计算结果,物化视图可以提供即时的查询反馈。
物化视图举例
假设有一个大型电商公司的数据库中包含一张名为orders
的表,记录了所有订单信息,包括order_id
(订单ID)、user_id
(用户ID)、product_id
(商品ID)、order_date
(订单日期)等字段。公司经常需要统计按天的用户购买次数(用户活跃度UV)和商品浏览次数(页面访问量PV)。
为了加速这类固定维度的聚合查询,可以创建一个物化视图。例如,创建一个物化视图daily_uv_pv
,预先计算每天每个用户的购买次数和每个商品的浏览次数:
sql
CREATE MATERIALIZED VIEW daily_uv_pv
AS
SELECT
user_id,
product_id,
DATE(order_date) AS order_day,
COUNT(DISTINCT order_id) AS user_activity_count, -- UV计数
COUNT(order_id) AS product_view_count -- PV计数
FROM orders
GROUP BY user_id, product_id, DATE(order_date);
这样,当业务方需要查询特定日期的用户活跃度或商品浏览量时,可以直接从daily_uv_pv
物化视图中快速获取结果,而不需要每次查询时都去扫描和汇总庞大的原始订单表,大大提高了查询效率。同时,Doris系统会自动管理物化视图的数据同步,确保数据的时效性和准确性。
我是近未来,祝你变得更强!