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