0

このMySQLクエリがあります:

EXPLAIN EXTENDED 
SELECT img.id as iid,img.*,users.*,img.ave_rate as arate,img.count_rate as cn
FROM images AS img 
LEFT OUTER JOIN users on img.uid=users.id

WHERE img.id NOT IN (SELECT rates.imageid from rates WHERE rates.ip=1854604622) 
GROUP BY iid

ORDER BY
iid DESC
LIMIT 30

その出力は次のようになります。

1   PRIMARY             img     index       NULL         PRIMARY    4   NULL                30  580    Using where
1   PRIMARY             users   eq_ref      PRIMARY      PRIMARY    4   twtgirls3.img.uid   1   100 
2   DEPENDENT SUBQUERY  rates   ref         imageid,ip   ip         5   const               4   100    Using where

最初の行でわかるように、PRIMARY キーをインデックスとして使用していますが、追加の列には「Using Where」がありますが、これはどういう意味ですか? キーが使用されていないということですか?3行目も同じ条件で……。

最後に、このクエリについてどう思いますか? 最適化されていますか?

4

1 に答える 1

0

Extra 列にも Using where と表示されている場合は、キー値の検索を実行するためにインデックスが使用されていることを意味します。Using where を使用しない場合、オプティマイザーはデータ行の読み取りを回避するためにインデックスを読み取っていても、ルックアップには使用していない可能性があります。たとえば、インデックスがクエリのカバリング インデックスである場合、オプティマイザはルックアップに使用せずにスキャンすることがあります。

ソース: https://dev.mysql.com/doc/refman/5.1/en/explain-output.html

于 2012-09-30T06:59:02.583 に答える