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_buyerdengan menentukan alias tabel./*+TDDL:index(a, g_i_buyer)*/ SELECT * FROM t_order a WHERE a.buyer_id = 123