本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Aurora 我的SQL提示
您可以使用 Aurora 我的SQL查詢的SQL提示來微調效能。您也可以使用提示來防止重要查詢的執行計劃因不可預期的情況而變更。
提示
若要驗證提示對查詢的影響,請檢查 EXPLAIN
陳述式所產生的查詢計劃。比較有和沒有提示時的查詢計劃。
在 Aurora 我的SQL版本 3 中,您可以使用我的SQL社區版 8.0 中提供的所有提示。如需有關這些提示的詳細資訊,請參閱我的SQL參考手冊中的最佳化程式提示
以下提示在 Aurora 我的SQL版本 2 中可用。這些提示適用於在 Aurora My SQL 版本 2 中使用雜湊聯結功能的查詢,尤其是使用 parallel 查詢最佳化的查詢。
- PQ,NO_PQ
-
指定是否強制最佳化工具以每資料表或每查詢為基礎,使用平行查詢。
PQ
會強制最佳化工具對指定資料表或整個查詢 (區塊) 使用平行查詢。NO_PQ
則會防止最佳化工具對指定資料表或整個查詢 (區塊) 使用平行查詢。此提示在 Aurora 我的SQL版本 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,不 _ HASH JOIN
-
開啟或關閉平行查詢最佳化工具,以選擇是否要針對查詢使用雜湊聯結最佳化方法的功能。如果該機制更有效率,則
HASH_JOIN
允許最佳化器使用雜湊聯結。NO_HASH_JOIN
可防止最佳化器使用雜湊聯結進行查詢。此提示在 Aurora 我的SQL版本 2.08 及更高版本中可用。它在 Aurora 我的SQL版本 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,不 _ HASH _ JOIN PROBING
-
在雜湊聯結查詢中,指定是否要使用指定的資料表作為聯結的探查端。查詢會測試建置資料表中的資料欄位值是否存在於探測資料表中,而不是讀取探測資料表的完整內容。您可以使用
HASH_JOIN_PROBING
和HASH_JOIN_BUILDING
指定處理雜湊聯結查詢的方式,而不需重新排序查詢文字中的資料表。此提示在 Aurora 我的SQL版本 2.08 及更高版本中可用。它在 Aurora 我的SQL版本 3 中沒有效果。下列範例示範如何使用此提示。指定資料表
HASH_JOIN_PROBING
的T2
提示與指定資料表NO_HASH_JOIN_PROBING
的T1
效果相同。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,不 _ HASH _ JOIN BUILDING
-
在雜湊聯結查詢中,指定是否要使用指定的資料表作為聯結的建置端。查詢會處理此資料表中的所有資料列,以建立與其他資料表交互參照的資料欄位值清單。您可以使用
HASH_JOIN_PROBING
和指HASH_JOIN_BUILDING
定處理雜湊聯結查詢的方式,而不需重新排序查詢文字中的資料表。此提示在 Aurora 我的SQL版本 2.08 及更高版本中可用。它在 Aurora 我的SQL版本 3 中沒有效果。下列範例示範如何使用此提示。指定資料表
HASH_JOIN_BUILDING
的T2
提示與指定資料表NO_HASH_JOIN_BUILDING
的T1
效果相同。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
-
指定查詢中的資料表是根據它們在查詢中列出的順序來聯結。它在涉及三個或更多資料表的查詢時很有用。它旨在作為我的SQL
STRAIGHT_JOIN
提示的替代品,相當於 My SQL JOIN_ FIXED _ ORDER提示。此提示在 Aurora 我的SQL版本 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
-
指定查詢中資料表的聯結順序。它在涉及三個或更多資料表的查詢時很有用。它相當於我的 SQL JOIN_ ORDER
提示。此提示在 Aurora 我的SQL版本 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
-
指定要在聯結順序中放第一個的資料表。它在涉及三個或更多資料表的查詢時很有用。它相當於我的 SQL JOIN_ PREFIX
提示。此提示在 Aurora 我的SQL版本 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
-
指定要放在聯結順序最後一個的資料表。它在涉及三個或更多資料表的查詢時很有用。它相當於我的 SQL JOIN_ SUFFIX
提示。此提示在 Aurora 我的SQL版本 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 聯結查詢最佳化。