全部产品
Search
文档中心

Lindorm:PETUNJUK

更新时间:Jul 02, 2025

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] | '_' | '@' | ':')*
Catatan
  • Petunjuk digunakan dalam format /*+ hintItems */, di mana hintItems menunjukkan petunjuk spesifik operasi. Beberapa hintItems dipisahkan 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 UPSERT, DELETE, UPDATE, dan SELECT.

Catatan
  • Untuk menggunakan parameter ini dalam pernyataan DELETE dan UPDATE, versi mesin SQL harus 2.8.4.4 atau lebih baru. Anda dapat melihat versi SQL di konsol.

  • _l_operation_timeout_ dapat digunakan bersama dengan parameter lain dalam petunjuk. Pisahkan parameter yang berbeda dengan koma (,). Contoh: SELECT /*+ _l_operation_timeout_(1000), _l_force_index_('idx1') */ * from test;.

_l_force_index_

STRING

Menentukan bahwa indeks harus digunakan. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan SELECT.

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 SELECT.

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 SELECT.

_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 SELECT.

_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 UPSERT dan SELECT.

_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 SELECT.

_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 SELECT.

_l_hot_only_

BOOLEAN

Menentukan apakah hanya data panas yang ditanyakan. Parameter ini hanya berlaku untuk petunjuk dalam pernyataan SELECT.

Anda dapat menyetel parameter ini ke salah satu nilai berikut:

  • true: Hanya data panas dalam tabel yang ditanyakan.

  • false: Semua data dalam tabel ditanyakan.

    Catatan

    Untuk menentukan bahwa semua data dalam tabel ditanyakan, Anda dapat menyetel _l_hot_only_ ke false atau tidak menentukan parameter ini dalam petunjuk.

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 c1 yang 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.