Petunjuk merupakan tambahan pada sintaksis SQL yang memainkan peran penting dalam kueri basis data. Anda dapat menggunakan petunjuk dalam pernyataan SQL untuk mengubah metode eksekusi pernyataan tersebut. LindormTable mendukung penggunaan petunjuk dalam pernyataan SQL, misalnya untuk mengelola versi data ganda. Topik ini menjelaskan sintaksis dan skenario penggunaan petunjuk dalam LindormTable.
Prasyarat
Versi LindormTable harus 2.3.1 atau lebih baru. Untuk informasi lebih lanjut tentang cara melihat atau meningkatkan versi LindormTable, lihat Catatan Rilis LindormTable dan Tingkatkan Versi Mesin Minor dari Instance Lindorm.
Batasan
Petunjuk hanya dapat digunakan setelah kata kunci INSERT, UPSERT, DELETE, dan SELECT dalam pernyataan SQL.
Jika versi LindormTable instance Anda adalah 2.5.2.1 atau lebih lama, petunjuk tidak dapat digunakan dalam pernyataan SQL yang dijalankan untuk melakukan kueri kompleks seperti subkueri dan kueri grup.
Sintaksis
hintExpression ::= /*+ hintItems */
hintItems ::= hintItem (',' hintItem )*
hintItem ::= identifier ('(' hintOption ( ',' hintOption)* ')')?
identifier ::= ( [A-Z] | '_' ) ( [A-Z] | [0-9] | '_' | '@' | ':')*Petunjuk digunakan dalam format
/*+ hintItems */, di manahintItemsmenunjukkan petunjuk spesifik operasi. BeberapahintItemsdipisahkan dengan koma (,).Petunjuk hanya dapat digunakan setelah kata kunci INSERT, UPSERT, DELETE, dan SELECT dalam pernyataan SQL LindormTable. Sebagai contoh, petunjuk dalam pernyataan berikut tidak valid:
UPSERT INTO /*+ _l_ts_(3000) */ t_test_ts(c1, c3) VALUES (1, 'c3');.
Parameter dari hintOptions
Parameter | Tipe | Deskripsi |
_l_operation_timeout_ Catatan Nama parameter ini adalah operationtimeout di Lindorm yang versinya lebih lama dari 2.5.2.1. | INT | Periode timeout untuk Operasi DML. Nilai default: 120000. Nilai parameter ini harus lebih besar dari 0. Satuan: milidetik. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan Catatan
|
_l_force_index_ | STRING | Menentukan bahwa indeks harus digunakan. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan Catatan Parameter _l_force_index_ tidak dapat ditentukan bersama dengan parameter _l_ignore_index_. |
_l_ignore_index_ | N/A | Menentukan bahwa indeks tidak digunakan untuk menanyakan data. Anda dapat menentukan parameter ini dalam petunjuk ketika ingin membandingkan performa antara kueri yang menggunakan indeks dan kueri yang tidak menggunakan indeks. Anda tidak perlu menentukan nilai untuk parameter ini ketika menggunakannya dalam petunjuk. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan Catatan Parameter _l_ignore_index_ tidak dapat ditentukan bersama dengan parameter _l_force_index_. |
_l_allow_filtering_ | N/A | Menentukan apakah akan mengizinkan kueri tidak efisien yang memindai semua data dalam tabel. Jika parameter ini tidak ditentukan dalam kueri, kesalahan akan dikembalikan ketika kondisi WHERE dalam kueri tidak mencakup kunci utama. Jika Anda menentukan parameter ini dalam petunjuk, kueri dapat dieksekusi tanpa ada kesalahan yang dilaporkan. Anda tidak perlu menentukan nilai untuk parameter ini ketika menggunakannya dalam petunjuk. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan |
_l_versions_ | INT | Menentukan bahwa N versi terbaru dari data yang Anda tanyakan dikembalikan. Nilai parameter ini harus lebih besar dari 0. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan |
_l_ts_ | BIGINT | Timestamp yang menunjukkan waktu ketika data dimasukkan ke kolom non-kunci utama atau waktu ketika data dalam kolom non-kunci utama ditanyakan. Timestamp dapat digunakan untuk penomoran versi data. Nilai parameter ini harus lebih besar dari 0. Satuan: milidetik. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan |
_l_ts_min_ | BIGINT | Timestamp minimum dari data yang ingin Anda tanyakan. Nilai parameter ini harus lebih besar dari 0. Satuan: milidetik. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan |
_l_ts_max_ | BIGINT | Timestamp maksimum dari data yang ingin Anda tanyakan. Nilai parameter ini harus lebih besar dari 0. Satuan: milidetik. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan |
_l_hot_only_ | BOOLEAN | Menentukan apakah hanya data panas yang ditanyakan. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan Anda dapat menyetel parameter ini ke salah satu nilai berikut:
|
Contoh
Contoh 1: Tanyakan jumlah baris dalam tabel dan atur periode timeout Operasi DML menjadi 30.000 ms.
SELECT /*+ _l_operation_timeout_(30000) */ COUNT(*) FROM t_test_ts;Hasil berikut dikembalikan:
+----------+ | COUNT(*) | +----------+ | 1 | +----------+Contoh 2: Tulis data ke baris dalam tabel dan atur periode timeout Operasi DML menjadi 30.000 ms.
UPSERT /*+ _l_operation_timeout_(30000) */ INTO t_test_ts(c1, c2, c3) values(1,2,3);Contoh 3: Hapus data yang sesuai dengan kondisi dan atur periode timeout Operasi DML menjadi 30.000 ms.
DELETE /*+ _l_operation_timeout_(30000) */ FROM tb WHERE c1 = 1;Contoh 4: Tentukan _l_force_index_ untuk secara paksa menggunakan indeks dalam kueri.
SELECT /*+ _l_force_index_('idx1') */ COUNT(*) FROM tb; // 'idx1' menunjukkan indeks yang dibuat untuk tabel.Hasil berikut dikembalikan:
+----------+ | COUNT(*) | +----------+ | 1 | +----------+Contoh 5: Tentukan _l_ignore_index_ untuk melakukan kueri tanpa menggunakan indeks.
SELECT /*+ _l_ignore_index_ */ COUNT(*) FROM tb;Hasil berikut dikembalikan:
+----------+ | COUNT(*) | +----------+ | 1 | +----------+Contoh 6: Tentukan _l_allow_filtering_ untuk mengizinkan kueri di mana kunci utama tidak termasuk dalam kondisi.
SELECT /*+ _l_allow_filtering_ */ COUNT(*) FROM tb WHERE c1 = 2;Hasil berikut dikembalikan:
+----------+ | COUNT(*) | +----------+ | 1 | +----------+Kolom
c1yang ditentukan dalam kondisi kueri bukan kolom kunci utama atau kolom indeks. Tidak ada kesalahan yang dikembalikan setelah Anda menentukan parameter _l_allow_filtering_ dalam petunjuk.Contoh 7: Tentukan _l_ts_ untuk mengonfigurasi timestamp dari data yang ingin Anda masukkan.
UPSERT /*+ _l_ts_(3000) */ INTO t_test_ts(c1, c3) VALUES (1, 'c3');Contoh 8: Tentukan _l_versions_ untuk menanyakan versi terbaru dari data.
SELECT /*+ _l_versions_(1) */ c1, c3, c3_l_ts FROM t_test_ts;Hasil berikut dikembalikan:
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | c3 | 3000 | +----+----+---------+
Skenario
Anda dapat menggunakan petunjuk untuk menanyakan data panas.