Klausa LIMIT biasanya digunakan untuk mendapatkan subset rekod daripada jadual MySQL. Walau bagaimanapun, apabila nilai offset (m) menjadi besar, prestasi pertanyaan boleh merosot dengan ketara. Ini kerana MySQL lazimnya menggunakan imbasan berurutan untuk melintasi keseluruhan jadual sehingga ia mencapai offset yang diingini.
Untuk mengurangkan isu prestasi ini, pertimbangkan untuk mencipta jadual pengindeksan yang menetapkan kunci jujukan yang sepadan dengan kunci utama anda jadual sasaran. Jadual tambahan ini, yang dikenali sebagai "jadual pengindeksan," akan bertindak sebagai jambatan antara jadual sasaran anda dan baris yang dikehendaki.
Dengan menyertai jadual pengindeksan ke jadual sasaran anda, anda boleh menggunakan klausa WHERE untuk cekap dapatkan semula baris khusus yang anda perlukan. Begini cara untuk melaksanakan pendekatan ini:
CREATE TABLE seq ( seq_no int not null auto_increment, id int not null, primary key(seq_no), unique(id) );
TRUNCATE seq; INSERT INTO seq (id) SELECT id FROM mytable ORDER BY id;
Untuk mendapatkan semula baris dengan mengimbangi 1,000,000 dan had 1000, laksanakan pertanyaan berikut:
SELECT mytable.* FROM mytable INNER JOIN seq USING(id) WHERE seq.seq_no BETWEEN 1000000 AND 1000999;
Pertanyaan yang dioptimumkan ini memanfaatkan jadual pengindeksan untuk memintas imbasan berjujukan dan mengakses terus baris yang dikehendaki. Akibatnya, prestasi harus dipertingkatkan dengan ketara, walaupun dengan nilai offset yang besar.
Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Pertanyaan MySQL LIMIT dengan Offset Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!