Pertanyaan Penurunan Prestasi dengan Peningkatan LIMIT Offset
Pangkalan data sering menghadapi kesesakan prestasi apabila menggunakan LIMIT dengan offset, terutamanya apabila berurusan dengan jadual besar. Isu ini amat ketara dalam MySQL apabila menggunakan klausa LIMIT OFFSET dengan nilai offset yang tinggi dan ORDER BY.
Salah satu contoh sedemikian ialah jadual bernama "besar" dengan lebih 16 juta rekod, menduduki kira-kira 2GB ruang storan. Melaksanakan pertanyaan dengan nilai offset yang rendah:
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
selesai dengan ketara lebih cepat berbanding dengan pertanyaan serupa dengan ofset yang lebih tinggi:
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
Walaupun kedua-dua pertanyaan mendapatkan bilangan rekod yang sama ( 30), overhed ORDER BY tidak mengambil kira prestasi perbezaan.
Penyelesaian Pengoptimuman
Untuk menangani isu ini dan meningkatkan prestasi, pendekatan berbeza boleh diguna pakai. Daripada menambah offset dalam gelung untuk mengumpul sejumlah besar data, kami boleh menyimpan ID terakhir set data sebelumnya dan menambahkan syarat WHERE pada pertanyaan berikutnya:
SELECT * FROM large WHERE id > lastId LIMIT 0, 30
Dengan mengekalkan offset sifar dan membuat pertanyaan untuk rekod melebihi ID terakhir yang diketahui, prestasi boleh dipertingkatkan secara drastik.
Atas ialah kandungan terperinci Mengapa Prestasi Pertanyaan Didegradasi dengan Offset LIMIT Besar dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!