全部產品
Search
文件中心

AnalyticDB:物化視圖

更新時間:Mar 01, 2025

物化視圖是數倉領域的核心特性之一。不同於邏輯視圖(view),物化視圖(materialized view)會持久化視圖的查詢結果,可用於加速分析,並能簡化ETL,適用於多種情境,例如報表類業務,大屏展示需求,來自BI工具的查詢等等。

什麼是物化視圖

物化視圖是AnalyticDB for MySQL內表,儲存了單表查詢或多表查詢的預計算結果。查詢物化視圖時,資料庫直接返回預先計算好的結果,無需訪問基表,從而顯著提高查詢響應速度。

僅XIHE計算引擎能夠建立物化視圖。不支援使用Spark引擎建立物化視圖。

不僅如此,即使使用者直接查詢基表,物化視圖也能提升查詢效能。當檢測到使用者查詢與物化視圖中的查詢完全或部分匹配時,AnalyticDB for MySQL會自動將對基表的查詢改寫為對物化視圖的查詢,利用預計算結果,實現查詢加速。

但需要注意的是,物化視圖反映的是最近一次重新整理後的資料狀態,可能不是基表的最新資料。物化視圖也不會在每次查詢時自動重新整理資料。您可以設定定時自動重新整理、基表覆蓋寫時自動重新整理,或者手動重新整理,確保物化視圖資料的及時性和準確性。

下表介紹了物化視圖支援的特性。

重新整理策略

基表類型

重新整理觸發機制

查詢類型

查詢改寫

全量重新整理

  • AnalyticDB for MySQL內表,包括分區表、非分區表和複製表

  • AnalyticDB for MySQL外表

  • 物化視圖

  • 視圖

  • 定時自動重新整理

  • 基表覆蓋寫時自動重新整理

  • 手動重新整理

任意查詢

支援開啟查詢改寫(V3.1.4)

增量重新整理(V3.1.9.0)

  • AnalyticDB for MySQL內表,包括分區表(V3.2.3.0)和非分區表

定時自動重新整理

  • 單表查詢(V3.1.9.0)

  • 多表Join查詢(V3.2.1.0)

關於物化視圖的使用限制和各個特性的版本資訊,請查看使用限制特性變更記錄

什麼情境適合建立物化視圖

物化視圖非常適合加速需要定期或多次重複執行的查詢。

  • 多個查詢包含相同的子查詢

    如果多個查詢都包含相同的子查詢,且子查詢中使用了彙總函式比較消耗計算資源,可以考慮建立物化視圖,提前計算並儲存子查詢的所有結果。當查詢包含該子查詢時,AnalyticDB for MySQL的查詢改寫功能將自動查詢物化視圖,實現加快查詢速度、減少計算資源消耗的效果。

  • 週期性多表Join

    如果有定期Join多張表的需求,可以為這些表的Join操作建立一個物化視圖。物化視圖會提前計算並儲存Join的結果,並定期自動重新整理資料。當查詢包含這些表的Join操作時,將直接從物化視圖返回結果,無需重新執行多表Join,因此可大幅提高查詢響應速度。

  • 資料湖查詢加速

    當使用者對外表發起查詢,AnalyticDB for MySQL可以自動將外表查詢改寫為對物化視圖的查詢,加速資料湖分析。

物化視圖的重要特性變更記錄

  • 3.1.4及以上版本:支援開啟物化視圖查詢改寫。

  • 3.1.4.7及以上版本:

    • 支援OR REPLACE關鍵字,當存在同名的物化視圖時,刪除原有物化視圖並建立新的物化視圖。

    • 物化視圖的數量上限,從8個增加到64個。

  • 3.1.9.0及以上版本:支援增量重新整理的單表物化視圖。

  • 3.1.9.3及以上版本:企業版、基礎版和湖倉版支援彈性物化視圖,即使用Job型資源群組建立並重新整理物化視圖。

  • 3.2.0.0及以上版本:支援增量重新整理的多表物化視圖。

  • 3.2.2.1及以上版本:增量重新整理的物化視圖,query_body支援MAX、MIN、AVG、APPROX_DISTINCT和COUNT(DISTINCT)函數。

  • 3.2.3.0及以上版本:增量重新整理的物化視圖,基表支援分區表。

  • 3.2.3.1及以上版本:增量重新整理的物化視圖,基表支援INSERT OVERWRITE和TRUNCATE操作。

您可以對物化視圖執行以下操作:

關於使用物化視圖的客戶案例,請參見物化視圖客戶案例