更新:
問題のより詳細な分析については、私のブログのこの記事を参照してください:
LIMIT 150000, 10のようなものを発行する場合 、それはMySQLを意味します これらの150,000をトラバースする必要があります 記録して次の10を見つけます 。
MySQLではインデックスのトラバースが遅くなります 。
また、MySQL 後期行ルックアップを実行することはできません。
理論的には、ORDER BY id LIMIT 100000, 10を実行すると 、インデックスを使用して100000から値を見つけるだけで十分です。 100010へ 、次に10のみを検索します そのインデックスを満たし、それらを返す行。
MySQLを除くすべての主要システム はそれを認識しており、値が実際に返される場合にのみ行を検索します。
MySQL ただし、すべての行を検索します。
クエリを次のように書き直してみてください:
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