Topik ini menjelaskan cara membuat tabel sementara kustom pada node baca-saja kluster PolarDB for MySQL. Untuk informasi lebih lanjut tentang node baca-saja, lihat Global read-only nodes.
Informasi latar belakang
PolarDB mendukung tabel sementara untuk meningkatkan kinerja kueri dan isolasi data. Tabel sementara menyimpan hasil perantara selama proses kueri, mengurangi pemindaian data berulang, meningkatkan kinerja kueri, serta memastikan isolasi data antar sesi. Namun, pada node utama kluster PolarDB dengan pembagian baca/tulis diaktifkan, beban kerja meningkat saat membuat tabel sementara dan mengeksekusi pernyataan DML pada tabel tersebut. Untuk mengatasi masalah ini, PolarDB memungkinkan Anda membuat dan menanyakan tabel sementara pada node baca-saja. Kami merekomendasikan penggunaan prosedur tersimpan untuk operasi batch guna mengoptimalkan kinerja dan mengurangi beban pada node utama.
Versi yang didukung
Kluster Anda harus menggunakan salah satu versi berikut:
Kluster 5.7 PolarDB for MySQL dengan versi revisi 5.7.1.0.35 atau lebih baru.
Kluster 8.0.1 PolarDB for MySQL dengan versi revisi 8.0.1.1.28 atau lebih baru.
Kluster 8.0.2 PolarDB for MySQL dengan versi revisi 8.0.2.2.5 atau lebih baru.
Batasan
Anda hanya dapat membuat tabel sementara pada node baca-saja menggunakan mesin MEMORY atau MyISAM. Pada node utama, tabel sementara dapat dibuat menggunakan mesin MEMORY atau InnoDB. Siklus hidup tabel sementara berada pada tingkat sesi. Proksi Polar tidak dapat secara otomatis merutekan operasi pembuatan tabel sementara dan modifikasi berikutnya ke node yang sama. Oleh karena itu, Anda harus menggunakan petunjuk untuk menentukan node kluster. Untuk informasi lebih lanjut, lihat Sintaks HINT.
Penggunaan
Di PolarDB for MySQL, tabel sementara biasanya dibuat dengan mengeksekusi pernyataan CREATE TEMPORARY TABLE. Pernyataan ini berlaku dalam sesi tempat tabel dibuat. Saat sesi berakhir, tabel sementara dan datanya akan otomatis dihapus.
Buat tabel sementara kustom baca-saja
Tambahkan /*force_node='pi-bpxxxxxxxx'*/ sebelum pernyataan SQL untuk menentukan arah routing. Jika tidak, kesalahan Table 'test.new_tbl' doesn't exist akan dilaporkan.
Tentukan node saat membuat tabel sementara. Jika tidak, tabel akan dirutekan ke node utama.
/*force_node='pi-bpxxxxxxxx'*/ CREATE TEMPORARY TABLE new_tbl (c1 int PRIMARY KEY, c2 varchar(100)) ENGINE=MEMORY;
/*force_node='pi-bpxxxxxxxx'*/ CREATE TEMPORARY TABLE new_tbl (c1 int PRIMARY KEY, c2 varchar(100)) ENGINE=MYISAM;
/*force_node='pi-bpxxxxxxxx'*/ CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
-- Tambahkan /*force_node='pi-bpxxxxxxxx'*/ sebelum pernyataan untuk menentukan arah routing.
/*force_node='pi-bpxxxxxxxx'*/ INSERT INTO new_tbl VALUES(1, 'test_string');
/*force_node='pi-bpxxxxxxxx'*/ SELECT * FROM new_tbl;Lakukan operasi pada tabel sementara dari node baca-saja
Pastikan bahwa node baca-saja telah dibuat. Untuk informasi lebih lanjut tentang cara membuat node baca-saja, lihat Tambah atau hapus node baca-saja.
Pastikan Anda dapat terhubung ke kluster. Untuk informasi lebih lanjut tentang cara terhubung ke kluster, lihat Hubungkan ke kluster. Setelah terhubung, Anda dapat memverifikasi apakah operasi pada tabel dari node baca-saja dapat dilakukan.
mysql -u <user> -h test-4.xxx.polardb.aliyuncs.com -P3306 -p<pwd>
SELECT * FROM new_tbl;
+----+-------------+
| c1 | c2 |
+----+-------------+
| 1 | test_string |
+----+-------------+
1 row in set (0.07 sec)
mysql> SHOW CREATE TABLE new_tbl;
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| new_tbl | CREATE TEMPORARY TABLE `new_tbl` (
`c1` int(11) NOT NULL,
`c2` varchar(100) DEFAULT NULL,
PRIMARY KEY (`c1`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.08 sec)Buat tabel sementara kustom dengan menggunakan prosedur tersimpan
Buat prosedur tersimpan menggunakan titik akhir kluster atau node utama.
CREATE TABLE t1 (c1 int PRIMARY KEY, c2 varchar(100)); INSERT INTO t1 VALUES(1, 'test_string'); DELIMITER //; CREATE PROCEDURE tmp_p0() BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_table engine = MYISAM AS SELECT * FROM t1 limit 10; SELECT * FROM tmp_table; DROP TABLE tmp_table; END //; DELIMITER ;Eksekusi prosedur tersimpan pada node baca-saja tertentu.
/*force_node='pi-bpxxxxxxxx'*/ call tmp_p0();