Pembaruan:
Lihat artikel ini di blog saya untuk analisis masalah yang lebih detail:
Saat Anda mengeluarkan sesuatu seperti LIMIT 150000, 10
, artinya MySQL
harus melintasi 150,000
. ini rekam dan temukan 10
berikutnya .
Melintasi indeks lambat di MySQL
.
Juga, MySQL
tidak mampu melakukan pencarian baris terlambat.
Secara teoritis, jika Anda melakukan ORDER BY id LIMIT 100000, 10
, cukup menggunakan indeks untuk menemukan nilai dari 100000
ke 100010
, lalu cari hanya 10
baris yang memenuhi indeks itu dan mengembalikannya.
Semua sistem utama kecuali MySQL
menyadarinya dan mencari baris hanya jika nilainya benar-benar akan dikembalikan.
MySQL
, namun, mencari setiap baris.
Coba tulis ulang kueri Anda seperti ini:
SELECT news.*
FROM (
SELECT id
FROM news
WHERE cat_id='4'
ORDER BY
id DESC
LIMIT 150000, 10
) o
JOIN news
ON news.id = o.id