Kesan OFFSET dalam MySQL LIMIT Pertanyaan pada Prestasi Pertanyaan
Apabila bekerja dengan set data yang besar dalam MySQL, menggunakan LIMIT dengan OFFSET boleh memberi kesan yang ketara prestasi pertanyaan. Ini amat ketara apabila menggunakan KUNCI UTAMA sebagai kriteria ORDER BY. Sebagai contoh, pertanyaan berikut dengan OFFSET yang lebih kecil:
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
melaksanakan lebih cepat daripada pertanyaan dengan OFFSET yang lebih besar:
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
Ini adalah benar walaupun kedua-dua pertanyaan mendapatkan semula yang sama bilangan rekod (30).
Memahami OFFSET Impak
Untuk memahami fenomena ini, kita perlu meneliti pelan pelaksanaan pertanyaan MySQL. Apabila menggunakan ORDER BY dengan OFFSET, MySQL perlu terlebih dahulu mengisih keseluruhan jadual mengikut kriteria yang ditentukan. Ia kemudian melangkau bilangan rekod yang ditentukan (OFFSET) dan mendapatkan semula bilangan rekod yang dikehendaki (LIMIT). Proses pengisihan ini menjadi semakin mahal apabila OFFSET meningkat dan saiz jadual bertambah.
Teknik Pengoptimuman
Untuk mengoptimumkan pertanyaan sedemikian, adalah dinasihatkan untuk menggunakan julat berasaskan pendekatan mendapatkan semula dan bukannya bergantung semata-mata pada OFFSET. Ini boleh dicapai dengan menahan ID rekod terakhir daripada pengambilan sebelumnya dan menambah syarat WHERE:
WHERE id > lastId LIMIT 0, 30
Dengan mengekalkan OFFSET sifar dan mendapatkan semula rekod berdasarkan ID terakhir set sebelumnya, kami menghapuskan nilai yang mahal dengan berkesan. operasi pengasingan. Akibatnya, prestasi pertanyaan akan meningkat secara drastik, terutamanya untuk jadual besar.
Atas ialah kandungan terperinci Bagaimanakah OFFSET MySQL dalam LIMIT Pertanyaan Mempengaruhi Prestasi, dan Bagaimana Ia Boleh Dioptimumkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!