更新:
問題のより詳細な分析については、私のブログのこの記事を参照してください:
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