All Products
Search
Document Center

PolarDB:INDEX\ HINT

Last Updated:Mar 29, 2026

PolarDB-X mendukung Global Secondary Index (GSI). Gunakan INDEX hint untuk mengarahkan kueri ke GSI tertentu alih-alih membiarkan pengoptimal memilihnya secara otomatis.

Batasan

INDEX hint hanya didukung dalam pernyataan SELECT.

Sintaksis

PolarDB-X menyediakan dua sintaksis INDEX hint:

FORCE INDEX

Sintaksis FORCE INDEX mengikuti standar MySQL FORCE INDEX. Tuliskan secara inline dalam klausa FROM:

tbl_name [[AS] alias] FORCE INDEX({index_name})

Jika indeks yang ditentukan bukan GSI, PolarDB-X meneruskan hint tersebut ke mesin penyimpanan MySQL.

INDEX() dalam hint TDDL

Hint INDEX() adalah hint kustom PolarDB-X yang ditulis dalam format komentar /*+TDDL: ... */. Hint ini mengidentifikasi GSI target dengan menggabungkan nama tabel (atau alias) dan nama indeks:

/*+TDDL:
    INDEX({table_name | table_alias}, {index_name})
*/

Hint tidak berpengaruh dalam kasus-kasus berikut:

  • Nama atau alias tabel yang ditentukan tidak ada.

  • Indeks yang ditentukan bukan GSI dari tabel tersebut.

Catatan penggunaan

Opsi -c saat menggunakan client command line MySQL

Saat menulis hint TDDL dalam format /*+TDDL:hint_command*/, client command line MySQL secara default menghapus hint bergaya komentar sebelum mengirim pernyataan ke server. Untuk mencegah hal ini, gunakan opsi -c saat menjalankan client:

mysql -h <host> -P <port> -u <user> -p -c

Tanpa -c, hint akan dihapus dan tidak berlaku. Untuk detail selengkapnya, lihat mysql Client Options di situs dokumentasi MySQL.

Format /!+TDDL:hint_command*/ merupakan alternatif yang tidak dianggap sebagai komentar oleh client MySQL dan tidak memerlukan opsi -c.

Contoh

Contoh berikut menggunakan tabel berikut, yang memiliki dua GSI: g_i_seller (dipartisi berdasarkan seller_id) dan g_i_buyer (GSI unik yang dipartisi berdasarkan buyer_id).

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`);

Gunakan FORCE INDEX dalam JOIN

Tentukan GSI g_i_seller dengan FORCE INDEX dalam klausa FROM:

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() dengan alias tabel

Tentukan GSI g_i_buyer menggunakan alias tabel a:

/*+TDDL:index(a, g_i_buyer)*/ SELECT * FROM t_order a WHERE a.buyer_id = 123