Kesan LIMIT OFFSET yang Lebih Tinggi pada Prestasi Pertanyaan MySQL
Apabila melaksanakan pertanyaan SELECT dengan klausa LIMIT dan jadual besar, tetapkan nilai tinggi nilai offset boleh memperlahankan masa pelaksanaan pertanyaan secara drastik. Tingkah laku ini amat ketara apabila menggunakan klausa ORDER BY dengan kunci utama.
Contohnya, pertimbangkan jadual yang dipanggil "besar" dengan lebih 16 juta rekod (bersaiz 2GB). Pertanyaan seperti berikut:
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
boleh dilaksanakan dengan lebih pantas berbanding dengan pertanyaan dengan offset yang lebih tinggi, seperti:
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
Kedua-dua pertanyaan mendapatkan bilangan rekod yang sama (30 ), menunjukkan bahawa perbezaan prestasi bukan disebabkan oleh overhed operasi ORDER BY.
Untuk mengoptimumkan pertanyaan, adalah disyorkan untuk meminimumkan penggunaan offset LIMIT tinggi. Sebaliknya, pertimbangkan untuk menggunakan klausa WHERE untuk memilih rekod berdasarkan pengecam yang diketahui, yang akan menghasilkan pengimbangan sifar.
Sebagai contoh, jika matlamatnya adalah untuk mendapatkan 30 baris terkini, pertanyaan berikut boleh digunakan :
SELECT * FROM large WHERE id > last_known_id LIMIT 0, 30
Dengan mengekalkan rekod ID terakhir yang diketahui (last_known_id), pendekatan ini membenarkan pertanyaan sentiasa bermula dari offset sifar, meningkatkan prestasi dengan ketara.
Atas ialah kandungan terperinci Mengapa Nilai OFFSET LIMIT Tinggi dalam Pertanyaan MySQL Sangat Lambat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!