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