Aktualizace:
Podrobnější analýzu problému najdete v tomto článku na mém blogu:
Když vydáte něco jako LIMIT 150000, 10 , to znamená, že MySQL by měl překonat těchto 150,000 záznamy a najděte dalších 10 .
Procházení indexu je v MySQL pomalé .
Také MySQL není schopen provádět pozdní vyhledávání řádků.
Teoreticky, pokud provedete ORDER BY id LIMIT 100000, 10 , stačí pomocí indexu najít hodnoty od 100000 na 100010 , pak vyhledejte pouze 10 řádky, které splňují tento index a vracejí je.
Všechny hlavní systémy kromě MySQL jsou si toho vědomi a vyhledávají řádky pouze v případě, že mají být hodnoty skutečně vráceny.
MySQL , však vyhledá každý řádek.
Zkuste svůj dotaz přepsat takto:
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