View a markdown version of this page

Petunjuk Aurora MySQL - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Petunjuk Aurora MySQL

Anda dapat menggunakan petunjuk SQL dengan kueri Aurora MySQL untuk performa yang sempurna. Anda juga dapat menggunakan petunjuk agar rencana eksekusi untuk kueri penting tidak berubah karena kondisi yang tidak dapat diprediksi.

Tip

Untuk memverifikasi efek petunjuk pada kueri, periksa rencana kueri yang dihasilkan oleh pernyataan EXPLAIN. Bandingkan rencana kueri dengan atau tanpa petunjuk.

Di Aurora MySQL versi 3, Anda dapat menggunakan semua petunjuk yang tersedia di MySQL 8.0 Community Edition. Untuk informasi selengkapnya tentang petunjuk ini, lihat Optimizer Hints dalam Panduan Referensi MySQL.

Petunjuk berikut tersedia di Aurora MySQL versi 2. Petunjuk ini berlaku untuk kueri yang menggunakan fitur hash join di Aurora MySQL versi 2, khususnya kueri yang menggunakan optimisasi kueri paralel.

PQ, NO_PQ

Menentukan apakah akan memaksa pengoptimisasi untuk menggunakan kueri paralel berdasarkan per tabel atau per kueri.

PQ memaksa pengoptimisasi untuk menggunakan kueri paralel untuk tabel tertentu atau seluruh kueri (blok). NO_PQ mencegah pengoptimisasi menggunakan kueri paralel untuk tabel tertentu atau seluruh kueri (blok).

Petunjuk ini tersedia di Aurora MySQL versi 2.11 dan lebih tinggi. Contoh berikut menunjukkan kepada Anda cara menggunakan petunjuk ini.

catatan

Menentukan nama tabel akan memaksa pengoptimisasi untuk menerapkan petunjuk PQ/NO_PQ hanya pada tabel pilihan tersebut. Jika nama tabel tidak ditentukan, petunjuk PQ/NO_PQ akan dipaksa pada semua tabel yang terpengaruh oleh blok kueri.

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

Mengaktifkan atau menonaktifkan kemampuan pengoptimisasi kueri paralel untuk memilih apakah akan menggunakan metode optimisasi hash join untuk kueri. HASH_JOIN memungkinkan pengoptimisasi menggunakan hash join jika mekanismenya lebih efisien. NO_HASH_JOIN mencegah pengoptimisasi menggunakan hash join untuk kueri. Petunjuk ini tersedia di Aurora MySQL versi 2.08 dan lebih tinggi. Ini tidak berpengaruh di Aurora MySQL versi 3.

Contoh berikut menunjukkan kepada Anda cara menggunakan petunjuk ini.

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

Di kueri hash join, tentukan apakah akan menggunakan tabel yang ditentukan untuk sisi probe dari join. Kueri ini menguji apakah nilai kolom dari tabel build ada di tabel probe, bukan membaca seluruh konten tabel probe. Anda dapat menggunakan HASH_JOIN_PROBING dan HASH_JOIN_BUILDING untuk menentukan cara kueri hash join diproses, tanpa mengatur ulang susunan tabel dalam teks kueri. Petunjuk ini tersedia di Aurora MySQL versi 2.08 dan lebih tinggi. Ini tidak berpengaruh di Aurora MySQL versi 3.

Contoh berikut menunjukkan cara menggunakan petunjuk ini. Menentukan petunjuk HASH_JOIN_PROBING untuk tabel T2 memiliki efek yang sama seperti menentukan NO_HASH_JOIN_PROBING untuk tabel 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, NO_HASH_JOIN_BUILDING

Di kueri hash join, tentukan apakah akan menggunakan tabel yang ditentukan untuk sisi build dari join. Kueri ini memproses semua baris dari tabel ini untuk membuat daftar nilai kolom untuk melakukan referensi silang dengan tabel lain. Anda dapat menggunakan HASH_JOIN_PROBING dan HASH_JOIN_BUILDING untuk menentukan cara kueri hash join diproses, tanpa mengatur ulang susunan tabel dalam teks kueri. Petunjuk ini tersedia di Aurora MySQL versi 2.08 dan lebih tinggi. Ini tidak berpengaruh di Aurora MySQL versi 3.

Contoh berikut menunjukkan kepada Anda cara menggunakan petunjuk ini. Menentukan petunjuk HASH_JOIN_BUILDING untuk tabel T2 memiliki efek yang sama seperti menentukan NO_HASH_JOIN_BUILDING untuk tabel 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

Menentukan bahwa tabel dalam kueri digabungkan berdasarkan urutan pencantumannya dalam kueri. Ini berguna dengan kueri yang memerlukan tiga tabel atau lebih. Petunjuk ini ditujukan sebagai pengganti untuk petunjuk STRAIGHT_JOIN MySQL dan setara dengan petunjuk JOIN_FIXED_ORDER MySQL. Petunjuk ini tersedia di Aurora MySQL versi 2.08 dan lebih tinggi.

Contoh berikut menunjukkan kepada Anda cara menggunakan petunjuk ini.

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

Menentukan urutan join untuk tabel dalam kueri. Ini berguna dengan kueri yang memerlukan tiga tabel atau lebih. Petunjuk ini setara dengan petunjuk JOIN_ORDER MySQL. Petunjuk ini tersedia di Aurora MySQL versi 2.08 dan lebih tinggi.

Contoh berikut menunjukkan kepada Anda cara menggunakan petunjuk ini.

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

Menentukan tabel yang dimasukkan pertama dalam urutan join. Ini berguna dengan kueri yang memerlukan tiga tabel atau lebih. Petunjuk ini setara dengan petunjuk JOIN_PREFIX MySQL. Petunjuk ini tersedia di Aurora MySQL versi 2.08 dan lebih tinggi.

Contoh berikut menunjukkan kepada Anda cara menggunakan petunjuk ini.

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

Menentukan tabel yang dimasukkan terakhir dalam urutan join. Ini berguna dengan kueri yang memerlukan tiga tabel atau lebih. Petunjuk ini setara dengan petunjuk JOIN_SUFFIX MySQL. Petunjuk ini tersedia di Aurora MySQL versi 2.08 dan lebih tinggi.

Contoh berikut menunjukkan kepada Anda cara menggunakan petunjuk ini.

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

Untuk informasi tentang menggunakan kueri hash join, lihat Mengoptimalkan kueri join MySQL Aurora besar dengan hash join.