Aurora MySQL 提示 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Aurora MySQL 提示

您可以將 SQL 提示與 Aurora MySQL 查詢搭配使用,以微調效能。您也可以使用提示來防止重要查詢的執行計劃因不可預期的情況而變更。

提示

若要驗證提示對查詢的影響,請檢查 EXPLAIN 陳述式所產生的查詢計劃。比較有和沒有提示時的查詢計劃。

在 Aurora MySQL 第 3 版中,您可以使用 MySQL Community Edition 8.0 中提供的所有提示。如需這些提示的詳細資訊,請參閱《MySQL 參考手冊》中的最佳化工具提示

下列提示可在 Aurora MySQL 第 2 版中取得。這些提示適用於使用 Aurora MySQL 第 2 版中雜湊聯結功能的查詢,尤其是使用平行查詢最佳化的查詢。

PQ,NO_PQ

指定是否強制最佳化工具以每資料表或每查詢為基礎,使用平行查詢。

PQ 會強制最佳化工具對指定資料表或整個查詢 (區塊) 使用平行查詢。NO_PQ 則會防止最佳化工具對指定資料表或整個查詢 (區塊) 使用平行查詢。

此提示可在 Aurora MySQL 2.11 及更高版本中取得。下列範例示範如何使用此提示。

注意

若指定資料表名稱,會強制最佳化工具僅在所選資料表套用 PQ/NO_PQ 提示。若未指定資料表名稱,會強制執行受查詢區塊影響的所有資料表之 PQ/NO_PQ 提示。

EXPLAIN SELECT /*+ PQ() */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ PQ(t1) */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ PQ(t1,t2) */ f1, f2 FROM num1 t1, num1 t2 WHERE t1.f1 = t2.f21; EXPLAIN SELECT /*+ NO_PQ() */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ NO_PQ(t1) */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ NO_PQ(t1,t2) */ f1, f2 FROM num1 t1, num1 t2 WHERE t1.f1 = t2.f21;
HASH_JOIN、NO_HASH_JOIN

開啟或關閉平行查詢最佳化工具,以選擇是否要針對查詢使用雜湊聯結最佳化方法的功能。如果該機制更有效率,則 HASH_JOIN 允許最佳化器使用雜湊聯結。NO_HASH_JOIN 可防止最佳化器使用雜湊聯結進行查詢。此提示可在 Aurora MySQL 2.08 及更高版本中取得。它在 Aurora MySQL 第 3 版中無效。

下列範例示範如何使用此提示。

EXPLAIN SELECT/*+ HASH_JOIN(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ NO_HASH_JOIN(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
HASH_JOIN_PROBING、NO_HASH_JOIN_PROBING

在雜湊聯結查詢中,指定是否要使用指定的資料表作為聯結的探查端。查詢會測試建置資料表中的資料欄位值是否存在於探測資料表中,而不是讀取探測資料表的完整內容。您可以使用 HASH_JOIN_PROBINGHASH_JOIN_BUILDING 指定處理雜湊聯結查詢的方式,而不需重新排序查詢文字中的資料表。此提示可在 Aurora MySQL 2.08 及更高版本中取得。它在 Aurora MySQL 第 3 版中無效。

下列範例示範如何使用此提示。指定資料表 HASH_JOIN_PROBINGT2 提示與指定資料表 NO_HASH_JOIN_PROBINGT1 效果相同。

EXPLAIN SELECT /*+ HASH_JOIN(t2) HASH_JOIN_PROBING(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ HASH_JOIN(t2) NO_HASH_JOIN_PROBING(t1) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
HASH_JOIN_BUILDING、NO_HASH_JOIN_BUILDING

在雜湊聯結查詢中,指定是否要使用指定的資料表作為聯結的建置端。查詢會處理此資料表中的所有資料列,以建立與其他資料表交互參照的資料欄位值清單。您可以使用 HASH_JOIN_PROBING 和指 HASH_JOIN_BUILDING 定處理雜湊聯結查詢的方式,而不需重新排序查詢文字中的資料表。此提示可在 Aurora MySQL 2.08 及更高版本中取得。它在 Aurora MySQL 第 3 版中無效。

下列範例示範如何使用此提示。指定資料表 HASH_JOIN_BUILDINGT2 提示與指定資料表 NO_HASH_JOIN_BUILDINGT1 效果相同。

EXPLAIN SELECT /*+ HASH_JOIN(t2) HASH_JOIN_BUILDING(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ HASH_JOIN(t2) NO_HASH_JOIN_BUILDING(t1) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
JOIN_FIXED_ORDER

指定查詢中的資料表是根據它們在查詢中列出的順序來聯結。它在涉及三個或更多資料表的查詢時很有用。它旨在替代 MySQL STRAIGHT_JOIN 提示,並等同於 MySQL JOIN_FIXED_ORDER 提示。此提示可在 Aurora MySQL 2.08 及更高版本中取得。

下列範例示範如何使用此提示。

EXPLAIN SELECT /*+ JOIN_FIXED_ORDER() */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
JOIN_ORDER

指定查詢中資料表的聯結順序。它在涉及三個或更多資料表的查詢時很有用。它相當於 MySQL JOIN_ORDER 提示。此提示可在 Aurora MySQL 2.08 及更高版本中取得。

下列範例示範如何使用此提示。

EXPLAIN SELECT /*+ JOIN_ORDER (t4, t2, t1, t3) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
JOIN_PREFIX

指定要在聯結順序中放第一個的資料表。它在涉及三個或更多資料表的查詢時很有用。它相當於 MySQL JOIN_PREFIX 提示。此提示可在 Aurora MySQL 2.08 及更高版本中取得。

下列範例示範如何使用此提示。

EXPLAIN SELECT /*+ JOIN_PREFIX (t4, t2) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
JOIN_SUFFIX

指定要放在聯結順序最後一個的資料表。它在涉及三個或更多資料表的查詢時很有用。它相當於 MySQL JOIN_SUFFIX 提示。此提示可在 Aurora MySQL 2.08 及更高版本中取得。

下列範例示範如何使用此提示。

EXPLAIN SELECT /*+ JOIN_SUFFIX (t1) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);

若要取得有關使用雜湊聯結查詢的資訊,請參閱 使用雜湊聯結,將大型 Aurora MySQL 聯結查詢最佳化