Mendapatkan Kembali Pilihan MySQL Besar dalam Potongan
Apabila berhadapan dengan pertanyaan MySQL SELECT yang besar melebihi berjuta-juta baris, ia menjadi penting untuk mengoptimumkan prestasi untuk mengelakkan kesilapan ingatan. Satu pendekatan yang berkesan ialah mendapatkan semula data dalam ketulan, dan bukannya cuba mendapatkan semula keseluruhan set data sekali gus.
Untuk mencapai ini, anda boleh menggunakan ciri LIMIT. Dengan menentukan baris permulaan (offset) dan bilangan baris untuk diambil (had), anda boleh mendapatkan semula data dalam segmen yang boleh diurus. Sebagai contoh, pertanyaan berikut mengembalikan 1,000 baris pertama:
<code class="sql">SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000</code>
Untuk mendapatkan semula potongan 1,000 baris berikutnya, laraskan offset dan had sewajarnya:
<code class="sql">SELECT * FROM MyTable ORDER BY whatever LIMIT 1000,1000 -- rows 1,001 - 2,000 SELECT * FROM MyTable ORDER BY whatever LIMIT 2000,1000 -- rows 2,001 - 3,000</code>
Walau bagaimanapun, untuk memastikan ketekalan data anda, adalah disyorkan untuk membuat jadual sementara dan mengisinya dengan hasil pertanyaan asal. Ini membekukan data dalam masa dan menghalang perubahan semasa pemprosesan. Jadual sementara kemudiannya boleh disoal dalam beberapa bahagian:
<code class="sql">CREATE TEMPORARY TABLE MyChunkedResult AS ( SELECT * FROM MyTable ORDER BY whatever ); -- retrieve row chunks SELECT * FROM MyChunkedResult LIMIT 0, 1000; SELECT * FROM MyChunkedResult LIMIT 1000,1000; SELECT * FROM MyChunkedResult LIMIT 2000,1000;</code>
Akhir sekali, ingat untuk menjatuhkan jadual sementara apabila selesai untuk mengelakkan penggunaan storan yang tidak perlu:
<code class="sql">DROP TEMPORARY TABLE MyChunkedResult;</code>
Dengan melaksanakan pendekatan ini, anda boleh memproses pilihan MySQL yang besar secara berkesan dalam ketulan, meningkatkan prestasi dan mengurangkan isu ingatan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mendapatkan kembali pertanyaan MySQL SELECT yang besar dalam ketulan untuk mengoptimumkan prestasi dan mengelakkan ralat memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!