全部产品
Search
文档中心

PolarDB:Cara menggunakan petunjuk INDEX

更新时间:Jul 02, 2025

PolarDB-X mendukung indeks sekunder global. Anda dapat menggunakan petunjuk INDEX untuk menanyakan data dari indeks sekunder global yang ditentukan.

Batasan

Petunjuk INDEX hanya dapat digunakan dalam pernyataan SELECT.

Catatan

PolarDB-X mendukung petunjuk kustom dalam format /*+TDDL:hint_command*/ dan /*+TDDL:hint_command*/. Jika Anda menggunakan format /*+TDDL:hint_command*/, Anda harus menentukan opsi -c dalam perintah logon saat Anda menggunakan klien baris perintah MySQL untuk mengeksekusi pernyataan SQL yang berisi petunjuk kustom PolarDB-X. Jika Anda tidak menentukan opsi ini, klien akan menghapus petunjuk kustom dari pernyataan sebelum mengirimkan pernyataan ke server PolarDB-X untuk dieksekusi karena petunjuk kustom didefinisikan dalam format komentar dalam pernyataan SQL. Akibatnya, petunjuk kustom PolarDB-X tidak dapat berfungsi. Untuk informasi lebih lanjut, lihat Opsi Klien mysql di situs resmi MySQL.

Sintaksis

PolarDB-X mendukung jenis sintaksis petunjuk INDEX berikut:

  • FORCE INDEX(): Sintaksis FORCE INDEX() sama dengan MySQL FORCE INDEX. Jika indeks yang ditentukan dalam petunjuk bukan indeks sekunder global, petunjuk FORCE INDEX dikirim ke mesin MySQL untuk dieksekusi.
    # FORCE INDEX()
    tbl_name [[AS] alias] [index_hint]
    index_hint:
        FORCE INDEX({index_name})               
  • INDEX(): Jika Anda menggunakan INDEX() untuk mendefinisikan petunjuk, indeks sekunder global ditentukan berdasarkan kombinasi nama tabel dan nama indeks atau kombinasi alias tabel dan nama indeks.
    # INDEX()
    /*+TDDL:
        INDEX({table_name | table_alias}, {index_name})
    */
    Catatan Pernyataan petunjuk tidak dapat berfungsi dalam skenario berikut:
    • Nama tabel atau alias yang ditentukan tidak ada.
    • Indeks yang ditentukan bukan indeks sekunder global dari tabel yang ditentukan.

Contoh

CREATE TABLE t_order (
 `id` bigint(11) NOT NULL AUTO_INCREMENT,
 `order_id` varchar(20) DEFAULT NULL,
 `buyer_id` varchar(20) DEFAULT NULL,
 `seller_id` varchar(20) DEFAULT NULL,
 `order_snapshot` longtext DEFAULT NULL,
 `order_detail` longtext DEFAULT NULL,
 PRIMARY KEY (`id`),
 GLOBAL INDEX `g_i_seller`(`seller_id`) dbpartition by hash(`seller_id`),
 UNIQUE GLOBAL INDEX `g_i_buyer` (`buyer_id`) COVERING(`seller_id`, `order_snapshot`) 
  dbpartition by hash(`buyer_id`) tbpartition by hash(`buyer_id`) tbpartitions 3 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`order_id`);
  • Dalam klausa FROM, gunakan FORCE INDEX untuk menentukan indeks sekunder global g_i_seller.
    SELECT a.*, b.order_id
       FROM t_seller a
         JOIN t_order b FORCE INDEX(g_i_seller) ON a.seller_id = b.seller_id
       WHERE a.seller_nick="abc";
  • Gunakan INDEX untuk menentukan indeks sekunder global g_i_buyer dengan menentukan alias tabel.
    /*+TDDL:index(a, g_i_buyer)*/ SELECT * FROM t_order a WHERE a.buyer_id = 123