Anda dapat mencoba menggunakan LIMIT
fitur. Jika Anda melakukan ini:
SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000
Anda akan mendapatkan 1.000 baris pertama. LIMIT
pertama nilai (0) mendefinisikan baris awal di set hasil. Ini diindeks nol, jadi 0 berarti "baris pertama". LIMIT
kedua value adalah jumlah maksimum baris yang akan diambil. Untuk mendapatkan 1.000 set berikutnya, lakukan ini:
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
Dan seterusnya. Ketika SELECT
tidak mengembalikan baris, selesai.
Ini tidak cukup dengan sendirinya, karena setiap perubahan yang dilakukan pada tabel saat Anda memproses 1K baris sekaligus akan membatalkan pesanan. Untuk membekukan hasil tepat waktu, mulailah dengan mengkueri hasil ke dalam tabel sementara:
CREATE TEMPORARY TABLE MyChunkedResult AS (
SELECT *
FROM MyTable
ORDER BY whatever
);
Catatan tambahan:sebaiknya pastikan tabel sementara tidak ada sebelumnya:
DROP TEMPORARY TABLE IF EXISTS MyChunkedResult;
Bagaimanapun, setelah tabel sementara berada di tempatnya, tarik potongan baris dari sana:
SELECT * FROM MyChunkedResult LIMIT 0, 1000;
SELECT * FROM MyChunkedResult LIMIT 1000,1000;
SELECT * FROM MyChunkedResult LIMIT 2000,1000;
.. and so on.
Saya akan menyerahkannya kepada Anda untuk membuat logika yang akan menghitung nilai batas setelah setiap potongan dan memeriksa hasil akhir. Saya juga merekomendasikan potongan yang jauh lebih besar dari 1.000 catatan; itu hanya nomor yang saya ambil dari udara.
Terakhir, sebaiknya hapus tabel sementara setelah Anda selesai:
DROP TEMPORARY TABLE MyChunkedResult;