以下は、genre_id 1 で 20 行を取得するクエリです。
EXPLAIN SELECT * FROM (`content`)
WHERE `genre_id` = '1'
AND `category` = 1
LIMIT 20
コンテンツ テーブルには、genre_id 1 の合計 654 行があり、genre_id にインデックスがあり、上記のクエリでは、正常に動作している 20 レコードのみを表示するように結果を制限していますが、行の下に 654 レコードが表示されていると説明しています。カテゴリにインデックスを追加しようとしましたただし、結果は同じで、 AND カテゴリ = 1 も削除しましたが、同じ行数:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE content ref genre_id genre_id 4 const 654 Using where
HERE私は答えを見つけました
行数の推定時に LIMIT は考慮されません 検査される行数を制限する LIMIT がある場合でも、MySQL は完全な数を出力します
しかし、コメントにも別の返信が投稿されました:
行数を見積もるときに LIMIT が考慮されるようになりました。どのバージョンがこれに対処したかはわかりませんが、5.1.30 では、EXPLAIN は正確に LIMIT を考慮に入れています。
InnoDB で MySQL 5.5.16 を使用しています。上記のコメントによると、まだ考慮されていません。だから私の質問は、制限を設定してもmysqlは654行すべてを通過して20行を返すのですか? ありがとう