Topik ini menjelaskan cara menggunakan pernyataan EXPLAIN untuk menentukan apakah indeks kolom dalam memori (IMCI) digunakan untuk mempercepat query SQL.
Contoh
Dalam kluster PolarDB for MySQL, rencana eksekusi untuk query pada data format kolom ditampilkan dalam format pohon horizontal, berbeda dari output rencana eksekusi untuk query pada data format baris. Anda dapat mengeksekusi pernyataan EXPLAIN untuk melihat rencana eksekusi query SQL dan menentukan apakah IMCI digunakan untuk mempercepat query tersebut.
Contoh Query SQL:
EXPLAIN SELECT l_orderkey, SUM(l_extendedprice * (1 - l_discount)) AS revenue, o_orderdate, o_shippriority
FROM customer, orders, lineitem
WHERE c_mktsegment = 'BUILDING'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < date '1995-03-24'
AND l_shipdate > date '1995-03-24'
GROUP BY l_orderkey, o_orderdate, o_shippriority
ORDER BY revenue DESC, o_orderdate;Rencana Eksekusi Ketika Data yang Diquery dalam Format Baris:
+----+-------------+----------+------------+------+--------------------+------------+---------+-----------------------------+--------+----------+----------------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+----------+------------+------+--------------------+------------+---------+-----------------------------+--------+----------+----------------------------------------------+
| 1 | SIMPLE | customer | NULL | ALL | PRIMARY | NULL | NULL | NULL | 147.630 | 10.00 | Menggunakan where; Menggunakan temporary; Menggunakan filesort |
| 1 | SIMPLE | orders | NULL | ref | PRIMARY,ORDERS_FK1 | ORDERS_FK1 | 4 | tpch100g.customer.C_CUSTKEY | 14 | 33.33 | Menggunakan where |
| 1 | SIMPLE | lineitem | NULL | ref | PRIMARY | PRIMARY | 4 | tpch100g.orders.O_ORDERKEY | 4 | 33.33 | Menggunakan where |
+----+-------------+----------+------------+------+--------------------+------------+---------+-----------------------------+--------+----------+----------------------------------------------+
3 baris dalam set, 1 peringatan (0,00 detik)Rencana Eksekusi (Format Pohon Horizontal) Ketika Data yang Diquery dalam Format Kolom:
+----+----------------------------+----------+--------+--------+-----------------------------------------------------------------------------+
| ID | Operator | Name | E-Rows | E-Cost | Extra Info |
+----+----------------------------+----------+--------+--------+-----------------------------------------------------------------------------+
| 1 | Select Statement | | | | Rencana Eksekusi IMCI (max_dop = 4, max_query_mem = 858993459) |
| 2 | └─Sort | | | | Kunci Sortir: revenue DESC,o_orderdate ASC |
| 3 | └─Hash Groupby | | | | Kunci Grup: (lineitem.L_ORDERKEY, orders.O_ORDERDATE, orders.O_SHIPPRIORITY) |
| 4 | └─Hash Join | | | | Kondisi Gabung: orders.O_ORDERKEY = lineitem.L_ORDERKEY |
| 5 | ├─Hash Join | | | | Kondisi Gabung: customer.C_CUSTKEY = orders.O_CUSTKEY |
| 6 | │ ├─Table Scan | customer | | | Kondisi: (C_MKTSEGMENT = "BUILDING") |
| 7 | │ └─Table Scan | orders | | | Kondisi: (O_ORDERDATE < 03/24/1995) |
| 8 | └─Table Scan | lineitem | | | Kondisi: (L_SHIPDATE > 03/24/1995) |
+----+----------------------------+----------+--------+--------+-----------------------------------------------------------------------------+
8 baris dalam set (0,01 detik)Referensi
IMCI hanya dapat mengakses kolom-kolom yang dicakup oleh IMCI tersebut. Jika tabel atau kolom yang dirujuk dalam pernyataan SQL tidak sepenuhnya dicakup oleh IMCI, maka IMCI tidak akan berlaku.
Untuk memeriksa apakah IMCI dibuat untuk tabel yang dirujuk dalam pernyataan SQL, panggil prosedur tersimpan
dbms_imci.check_columnar_index(). Prosedur ini mengurai pernyataan SQL yang dimasukkan, mendapatkan semua kolom yang dirujuk, dan memeriksa apakah kolom-kolom tersebut dicakup oleh IMCI. Untuk informasi lebih lanjut, lihat Periksa Apakah IMCI Dibuat untuk Tabel dalam Pernyataan SQL.Untuk mendapatkan pernyataan DDL yang digunakan untuk membuat IMCI, panggil prosedur tersimpan
dbms_imci.columnar_advise(). Prosedur ini mengembalikan pernyataan DDL berdasarkan pernyataan SQL yang dimasukkan. Setelah mengeksekusi pernyataan DDL, IMCI dibuat untuk mencakup semua kolom yang dirujuk dalam pernyataan SQL. Untuk informasi lebih lanjut, lihat Dapatkan Pernyataan DDL yang Digunakan untuk Membuat IMCI.