3

以下は、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行を返すのですか? ありがとう

4

1 に答える 1