LIMIT dengan offset sangat lambat di sebagian besar basis data (saya telah menemukan beberapa dokumentasi untuk efek ini untuk MySQL dan saya mencoba mencari artikel yang sangat bagus yang saya baca beberapa waktu lalu menjelaskan ini untuk SQLite). Alasannya adalah karena umumnya diterapkan seperti ini:
- Lakukan semua perencanaan kueri normal seolah-olah
LIMIT
klausa tidak ada - Telusuri hasil hingga kami mendapatkan indeks yang Anda inginkan
- Mulai menampilkan hasil
Apa artinya ini jika Anda melakukan LIMIT 10000, 10
, itu akan ditafsirkan sebagai:
- Ambil 10.000 hasil pertama dan abaikan
- Berikan 10 hasil berikutnya
Ada pengoptimalan sepele di mana Anda setidaknya dapat menggunakan indeks untuk 10.000 hasil pertama karena Anda tidak peduli dengan nilainya, tetapi bahkan dalam kasus itu, database masih perlu menelusuri 10.000 nilai indeks sebelum memberi Anda 10 hasil. Mungkin ada pengoptimalan lebih lanjut yang dapat meningkatkan ini, tetapi dalam kasus umum Anda tidak ingin menggunakan LIMIT
dengan offset untuk nilai besar .
Cara paling efisien untuk menangani pagination yang saya ketahui adalah dengan melacak indeks terakhir, jadi jika halaman pertama berakhir pada id = 5
, lalu buat berikutnya link memiliki WHERE id > 5
(dengan LIMIT x
tentu saja).
EDIT:Menemukan artikel untuk SQLite . Saya sangat menyarankan Anda membaca ini karena menjelaskan The Right Way™ untuk melakukan sesuatu dalam SQL. Karena orang-orang SQLite sangat pintar dan database lain memiliki masalah yang sama, saya berasumsi MySQL mengimplementasikan ini dengan cara yang sama.