全部产品
Search
文档中心

PolarDB:Petunjuk LEADING

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menggunakan petunjuk LEADING untuk menentukan urutan penggabungan beberapa tabel. Petunjuk LEADING menginstruksikan pengoptimal untuk menggabungkan tabel dalam urutan tertentu sebelum digabungkan dengan tabel lainnya.

Catatan Penggunaan

  • Petunjuk LEADING tidak didukung dalam pernyataan SQL bersarang. Untuk meminimalkan hasil yang tidak terduga, hindari penggunaan petunjuk LEADING dalam klausa tersebut.

  • Ketika pengoptimal menentukan urutan penggabungan untuk beberapa tabel, tabel dengan kondisi penggabungan diprioritaskan. Sistem hanya akan mencoba membuat Produk Kartesius jika tidak ada rencana eksekusi yang tersedia. Oleh karena itu, ketika menggunakan petunjuk LEADING untuk dua tabel berdekatan dengan kondisi penggabungan, tabel yang langsung mengikuti tabel lainnya akan digabungkan ke tabel sebelumnya. Jika tidak, pengoptimal akan mengabaikan petunjuk LEADING karena tidak ada rencana eksekusi yang dapat dihasilkan.

Prasyarat

Secara default, fitur petunjuk diaktifkan untuk PolarDB for PostgreSQL (Compatible with Oracle). Anda juga dapat menjalankan perintah berikut untuk mengaktifkan fitur ini:

set enable_hints = true;

Sintaksis

  • Notasi petunjuk dimulai dengan /*+ dan diakhiri dengan */. Tidak diperbolehkan ada spasi antara tanda bintang (*) dan tanda tambah (+).

  • Petunjuk terdiri dari nama petunjuk diikuti oleh parameter yang diapit oleh sepasang tanda kurung. Parameter-parameter tersebut dipisahkan oleh spasi.

  • Petunjuk harus langsung mengikuti kata kunci seperti SELECT, UPDATE, INSERT, MERGE, atau DELETE.

  • Petunjuk tidak peka huruf besar/kecil.

Catatan

Dalam situasi berikut, konflik menyebabkan petunjuk LEADING menjadi tidak valid:

  • Jika tabel yang ditentukan tidak dapat digabungkan dalam urutan tertentu karena hubungan dependensi, petunjuk LEADING diabaikan.

  • Jika lebih dari satu petunjuk LEADING ditentukan, semua petunjuk LEADING diabaikan.

  • Jika baik petunjuk ORDERED maupun LEADING ditentukan, petunjuk ORDERED menggantikan semua petunjuk LEADING.

  • Jika nama atau alias tabel yang ditentukan mengandung titik (.), seperti "s.t", semua petunjuk LEADING diabaikan.

  • Jika petunjuk LEADING tidak langsung mengikuti kata kunci seperti SELECT, UPDATE, INSERT, MERGE, atau DELETE, petunjuk LEADING diabaikan.

Contoh

Misalkan sebuah database berisi empat tabel dengan nama atau alias a, b, c, dan d. Setiap tabel dapat digabungkan dengan tabel lainnya.

  • Valid syntax

    Contoh

    Penggabungan yang mungkin

    /*+ leading(a) */

    (((a b) c) d), (((a b) d) c), (((a c) b) d), (((a c) d) b), (((a d) b) c), (((a c) c) b)

    /*+ leading(a b) */

    (((a b) c) d), (((a b) d) c)

    /*+ leading(a b c) */

    (((a b) c) d)

    /*+ leading(a b c d) */

    (((a b) c) d)

    Catatan

    ((a b) c) menentukan prioritas penggabungan dalam urutan berikut: a, b, dan c. (c (a b)) menentukan prioritas penggabungan dalam urutan berikut: c, a, dan b.

  • Invalid syntax

    Contoh:

    • /* + leading(a) */

    • /*+ leading(a b) leading(a b) */

    • /*+ leading(a b a) */

    • /*+ leading(a b) leading(a)*/

    • /*+ leading(a b) leading(c d) */

    • /*+ leading(a b e) */

    • *+ leading(a b) leading(a c) */

    • /*+ leading() */

    Catatan

    Database tidak berisi tabel dengan nama atau alias e.