AnalyticDB for MySQL物化視圖會將使用者定義的查詢提前計算好並將查詢結果儲存起來。在分析複雜查詢時可以直接從物化視圖中讀取預先計算好的查詢結果,從而加快查詢回應時間。本文主要介紹如何建立物化視圖。
許可權要求
建立視圖需要有資料庫或表層級的CREATE許可權。
重新整理物化視圖需要有資料庫或表層級的INSERT許可權。
需要有物化視圖所涉及的所有表的相關列(或整個表)的SELECT許可權。
如果在建立物化視圖時指定物化視圖為自動重新整理模式,需要具備通過伺服器本地(即
127.0.0.1
)或者任意IP(即'%'
)重新整理視圖的許可權。
使用限制
不支援對物化視圖執行
INSERT
、DELETE
或UPDATE
操作。不支援刪除或重新命名物化視圖的基表或基表中的列。如需修改基表需要先刪除物化視圖。
預設情況下,一個AnalyticDB for MySQL叢集支援建立的物化視圖上限如下:
叢集版本低於3.1.4.7:最多支援建立8個物化視圖。
叢集版本等於或大於3.1.4.7:最多支援建立64個物化視圖。
說明查看湖倉版叢集的核心版本,請執行
SELECT adb_version();
。如需升級核心版本,請聯絡支援人員。查看和升級數倉版叢集的核心版本,請參見查看和升級版本。
文法
CREATE [OR REPLACE] MATERIALIZED VIEW <mv_name>
[MV DEFINITION]
[MV_PROPERTIES=<MV_PROPERTIES>]
[REFRESH [COMPLETE|FAST] [ON [DEMAND |OVERWRITE] [START WITH date] [NEXT date]]]
[QUERY REWRITE]
AS
<QUERY BODY>;
參數說明
參數 | 說明 |
| 根據是否存在重名物化視圖選擇對應的規則來建立物化視圖,具體規則如下:
說明 僅3.1.4.7及以上核心版本叢集支援該參數。
|
| 物化視圖名稱。 |
| 定義物化視圖中表相關的特性。
|
| 定義物化視圖的重新整理模式。取值如下:
|
| 重新整理物化視圖的條件。取值如下:
|
| 定義物化視圖的首次重新整理時間。選填參數,若不填,則預設首次重新整理時間為目前時間點。 說明 支援使用時間函數,但只支援精確到秒,毫秒部分會被截斷。更多關於重新整理物化視圖的詳情,請參見全量重新整理物化視圖和增量重新整理物化視圖。 |
| 定義物化視圖的下次重新整理時間。若需要設定自動重新整理, |
| 是否開啟查詢改寫功能。開啟後查詢可被自動改寫到物化視圖上,物化視圖可以被當作緩衝使用。取值如下:
|
| 定義物化視圖的查詢主體,查詢主體可以是表、邏輯視圖或者物化視圖。其中:
|
| 建立彈性物化視圖,需要配置MV_PROPERTIES。彈性物化視圖指建立和重新整理物化視圖時使用Job型資源群組動態拉起的資源,可以有效降低成本,但是重新整理速度相較普通物化視圖會有所降低。 建立彈性物化視圖需滿足以下條件:
MV_PROPERTIES屬性包括mv_resource_group和mv_refresh_hints參數,格式為JSON。
|
樣本
建立物化視圖
myview1
,每五分鐘重新整理一次。CREATE MATERIALIZED VIEW myview1 REFRESH NEXT now() + interval 5 minute AS SELECT count(*) as cnt FROM base;
建立物化視圖
myview2
,每周一淩晨2點重新整理。CREATE MATERIALIZED VIEW myview2 REFRESH START WITH DATE_FORMAT(now() + interval 7 - weekday(now()) day, '%Y-%m-%d 02:00:00') NEXT DATE_FORMAT(now() + interval 7 - weekday(now()) day, '%Y-%m-%d 02:00:00') AS SELECT count(*) as cnt FROM base;
建立物化視圖
myview3
,每天淩晨2點重新整理。CREATE MATERIALIZED VIEW myview3 REFRESH START WITH DATE_FORMAT(now() + interval 1 day, '%Y-%m-%d 02:00:00') NEXT DATE_FORMAT(now() + interval 1 day, '%Y-%m-%d 02:00:00') AS SELECT count(*) as cnt FROM base;
建立物化視圖
myview4
,每個月第一天淩晨2點重新整理。CREATE MATERIALIZED VIEW myview4 REFRESH NEXT DATE_FORMAT(last_day(now()) + interval 1 day, '%Y-%m-%d 02:00:00') AS SELECT count(*) as cnt FROM base;
建立物化視圖
myview5
,只重新整理一次。CREATE MATERIALIZED VIEW myview5 REFRESH START WITH now() + interval 1 day AS SELECT count(*) as cnt FROM base;
建立物化視圖
myview6
,不自動重新整理,完全依靠手動重新整理。CREATE MATERIALIZED VIEW myview6 ( PRIMARY KEY (id) ) DISTRIBUTED BY HASH (id) AS SELECT id, name FROM base;
建立物化視圖
myview7
,指定列建立索引,預設全部列建立索引。CREATE MATERIALIZED VIEW myview7 ( INDEX (name), PRIMARY KEY (id) ) DISTRIBUTED BY HASH (id) AS SELECT id, name, age FROM base;
建立物化視圖
myview8
,指定分區鍵和注釋。CREATE MATERIALIZED VIEW myview8 ( name varchar(10), value double, KEY INDEX_ID(id) COMMENT 'id', CLUSTERED KEY INDEX(name, value), PRIMARY KEY(id) ) DISTRIBUTED BY hash(id) PARTITION BY value(date_format(dat, "%Y%m%d")) LIFECYCLE 30 COMMENT 'MATERIALIZED VIEW c' AS SELECT * FROM base;
建立彈性物化視圖
myview9
,每天重新整理一次,彈性資源群組為my_job_rg_1。CREATE MATERIALIZED VIEW myview9 MV_PROPERTIES='{ "mv_resource_group":"my_job_rg_1", "mv_refresh_hints":{"query_priority":"HIGH"} }' REFRESH COMPLETE ON DEMAND START WITH now() NEXT now() + INTERVAL 1 DAY AS SELECT * FROM base;
相關文檔
全量重新整理物化視圖:指定物化視圖重新整理模式或者手動重新整理物化視圖。
管理物化視圖:查看物化視圖、物化視圖自動重新整理記錄和物化視圖資訊表,刪除物化視圖。
查詢物化視圖:查詢物化視圖。