Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan MySQL dengan Offset LIMIT Besar Sangat Lambat?

Mengapa Pertanyaan MySQL dengan Offset LIMIT Besar Sangat Lambat?

Linda Hamilton
Linda Hamiltonasal
2024-12-13 01:17:09560semak imbas

Why Are MySQL Queries with Large LIMIT Offsets So Slow?

Kesan LIMIT Offset yang Lebih Tinggi pada Kelajuan Pertanyaan MySQL

Apabila menanyakan jadual MySQL yang besar dengan pengimbangan LIMIT yang semakin meningkat bersamaan dengan ORDER BY, pengguna mungkin mengalami kelembapan yang ketara dalam kelajuan pertanyaan. Ini amat ketara apabila jadual melebihi 16 juta rekod atau bersaiz kira-kira 2GB.

Sebagai contoh, pertanyaan berikut dengan offset kecil dilaksanakan dengan ketara lebih cepat daripada pertanyaan dengan ofset lebih besar:

SELECT * FROM large ORDER BY `id` LIMIT 0, 30
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30

Walaupun kedua-dua pertanyaan hanya mendapatkan 30 baris, pertanyaan kedua mengambil masa yang lebih lama walaupun overhed boleh diabaikan ORDER BY.

Untuk mengoptimumkan senario ini, pertimbangkan untuk menggunakan pendekatan alternatif:

  1. Simpan ID terakhir bagi set baris yang diambil (mis., lastId = 530).
  2. Ubah suai pertanyaan untuk memasukkan syarat WHERE id > lastId.
SELECT * FROM large WHERE `id` > lastId LIMIT 0, 30

Dengan mengekalkan offset sifar secara konsisten, pertanyaan akan konsisten berprestasi pada kelajuan optimum, walaupun semasa mengambil sejumlah besar data dalam lelaran.

Atas ialah kandungan terperinci Mengapa Pertanyaan MySQL dengan Offset LIMIT Besar Sangat Lambat?. 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