Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengoptimumkan Pertanyaan MySQL LIMIT dengan Offset Besar?

Bagaimana untuk Mengoptimumkan Pertanyaan MySQL LIMIT dengan Offset Besar?

Linda Hamilton
Linda Hamiltonasal
2024-11-11 06:01:03252semak imbas

How to Optimize MySQL LIMIT Queries with Large Offsets?

Mengoptimumkan Pertanyaan MySQL LIMIT dengan Offset Besar

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:

  1. Buat Jadual Pengindeksan:
CREATE TABLE seq (
   seq_no int not null auto_increment,
   id int not null,
   primary key(seq_no),
   unique(id)
);
  1. Isi Jadual Pengindeksan:
TRUNCATE seq;
INSERT INTO seq (id) SELECT id FROM mytable ORDER BY id;
  1. Lakukan Pertanyaan Dioptimumkan:

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn