物化視圖是數倉領域的核心特性之一。不同於邏輯視圖(view),物化視圖(materialized view)會持久化視圖的查詢結果,可用於加速分析,並能簡化ETL,適用於多種情境,例如報表類業務,大屏展示需求,來自BI工具的查詢等等。
什麼是物化視圖
物化視圖是AnalyticDB for MySQL內表,儲存了單表查詢或多表查詢的預計算結果。查詢物化視圖時,資料庫直接返回預先計算好的結果,無需訪問基表,從而顯著提高查詢響應速度。
僅XIHE計算引擎能夠建立物化視圖。不支援使用Spark引擎建立物化視圖。
不僅如此,即使使用者直接查詢基表,物化視圖也能提升查詢效能。當檢測到使用者查詢與物化視圖中的查詢完全或部分匹配時,AnalyticDB for MySQL會自動將對基表的查詢改寫為對物化視圖的查詢,利用預計算結果,實現查詢加速。
但需要注意的是,物化視圖反映的是最近一次重新整理後的資料狀態,可能不是基表的最新資料。物化視圖也不會在每次查詢時自動重新整理資料。您可以設定定時自動重新整理、基表覆蓋寫時自動重新整理,或者手動重新整理,確保物化視圖資料的及時性和準確性。
下表介紹了物化視圖支援的特性。
重新整理策略 | 基表類型 | 重新整理觸發機制 | 查詢類型 | 查詢改寫 |
全量重新整理 |
|
| 任意查詢 | 支援開啟查詢改寫(V3.1.4) |
增量重新整理(V3.1.9.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操作。
您可以對物化視圖執行以下操作:
關於使用物化視圖的客戶案例,請參見物化視圖客戶案例。