Bagaimana untuk Mengoptimumkan Pertanyaan MySQL LIMIT dengan Offset Besar?

Linda Hamilton
Lepaskan: 2024-11-11 06:01:03
asal
256 orang telah melayarinya

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)
);
Salin selepas log masuk
  1. Isi Jadual Pengindeksan:
TRUNCATE seq;
INSERT INTO seq (id) SELECT id FROM mytable ORDER BY id;
Salin selepas log masuk
  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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan