全部产品
Search
文档中心

PolarDB:Petunjuk Optimizer

更新时间:Jul 02, 2025

Saat mengeksekusi pernyataan DELETE, INSERT, SELECT, atau UPDATE, PolarDB for PostgreSQL (Kompatibel dengan Oracle) menghasilkan beberapa rencana eksekusi dan memilih yang terbaik berdasarkan elemen seperti biaya eksekusi. Anda dapat menggunakan petunjuk optimizer untuk memengaruhi pemilihan tersebut.

Latar Belakang

Saat Anda mengeksekusi pernyataan DELETE, INSERT, SELECT, atau UPDATE, PolarDB for PostgreSQL (Kompatibel dengan Oracle) menghasilkan satu set rencana eksekusi. PolarDB for PostgreSQL (Kompatibel dengan Oracle) menganalisis rencana-rencana eksekusi ini dan kemudian memilih rencana eksekusi yang dapat mengembalikan set hasil dalam waktu paling singkat.

PolarDB for PostgreSQL (Kompatibel dengan Oracle) memilih rencana eksekusi berdasarkan faktor-faktor berikut:

  • Estimasi biaya eksekusi untuk pemrosesan data

  • Nilai-nilai yang ditetapkan untuk parameter di bagian Query Tuning file postgresql.conf

  • Statistik kolom yang dikumpulkan oleh pernyataan ANALYZE

Dalam kebanyakan kasus, PolarDB for PostgreSQL (Kompatibel dengan Oracle) memilih rencana eksekusi yang mengonsumsi sumber daya paling sedikit. Namun, Anda dapat menggunakan petunjuk optimizer untuk memengaruhi pemilihan tersebut.

Petunjuk optimizer adalah direktif yang langsung mengikuti pernyataan DELETE, INSERT, SELECT, atau UPDATE. Petunjuk ini tertanam dalam sintaksis yang mirip dengan komentar. Saat PolarDB for PostgreSQL (Kompatibel dengan Oracle) menghasilkan set hasil, PolarDB O Edition memilih atau menghindari rencana eksekusi tertentu berdasarkan kata kunci dalam komentar.

Sintaksis

Petunjuk optimizer dapat disertakan dalam salah satu format berikut:

{ DELETE | INSERT | SELECT | UPDATE } /*+ { hint [ comment ] } [...] */
 statement_body

{ DELETE | INSERT | SELECT | UPDATE } --+ { hint [ comment ] } [...]
 statement_body
Catatan
  • Tanda tambah (+) harus segera mengikuti simbol pembuka komentar /* atau --. Pastikan tidak ada karakter spasi antara tanda tambah (+) dan simbol pembuka komentar. Jika tidak, PolarDB O Edition tidak dapat menafsirkan konten terkait sebagai petunjuk.

  • Dalam dua format sebelumnya, petunjuk dan komentar ditampilkan secara berbeda.

    • Dalam format pertama, petunjuk dan komentar dapat mencakup beberapa baris.

    • Dalam format kedua, petunjuk dan komentar harus ditempatkan dalam satu baris.

    Namun, dalam kedua format, bagian statement_body harus dimulai pada baris baru.

  • Kami merekomendasikan agar Anda menggunakan petunjuk bersama dengan pernyataan EXPLAIN untuk memastikan bahwa format petunjuk valid.

Parameter

Parameter

Deskripsi

hint

Direktif petunjuk optimizer.

comment

Sebuah string dengan informasi tambahan. Karakter yang dapat disertakan dalam komentar dibatasi. Dalam kebanyakan kasus, komentar hanya dapat berisi huruf, angka, garis bawah (_), tanda dolar ($), tanda pagar (#), dan karakter spasi. Karakter-karakter ini harus sesuai dengan sintaksis pengenal. Jika komentar tidak memenuhi persyaratan ini, PolarDB O Edition mengabaikan petunjuk-petunjuk berikutnya.

statement_body

Sisa dari pernyataan DELETE, INSERT, SELECT, atau UPDATE.

Pertimbangan tambahan

  • Jika Anda mengonfigurasi parameter metode planner untuk menonaktifkan jenis rencana, rencana eksekusi dari jenis tersebut tidak akan digunakan meskipun ditentukan dalam petunjuk. Dalam hal ini, rencana eksekusi hanya digunakan jika tidak ada rencana lain yang tersedia. Parameter berikut adalah contoh parameter metode planner: enable_indexscan, enable_seqscan, enable_hashjoin, enable_mergejoin, dan enable_nestloop. Semua parameter ini bertipe Boolean.

  • Petunjuk tertanam dalam komentar. Jika petunjuk salah eja atau parameter petunjuk seperti nama view, tabel, atau kolom salah eja atau tidak ada dalam pernyataan SQL, sistem tidak akan memberikan kesalahan sintaksis. Sistem hanya akan mengabaikan seluruh petunjuk.

  • Jika alias digunakan sebagai nama tabel atau view dalam pernyataan SQL, nama alias alih-alih nama objek asli harus digunakan dalam petunjuk. Sebagai contoh, dalam pernyataan SELECT /*+ FULL(acct) */ * FROM accounts acct ..., acct, Anda harus menentukan alias acct alih-alih nama tabel accounts dalam petunjuk FULL.

  • Kami merekomendasikan agar Anda tidak menggunakan petunjuk optimizer di lingkungan produksi karena data tabel sering berubah di lingkungan tersebut.

Untuk informasi lebih lanjut tentang petunjuk optimizer, lihat topik-topik berikut.