5

SQLコードを試しました:

explain SELECT * FROM myTable LIMIT 1

その結果、私は次のようになりました。

id select_type table   type possible_keys key  key_len ref  **rows**
1  SIMPLE      myTable ALL  NULL          NULL NULL    NULL **32117**

クエリが単に最初の行を選択するのではなく、すべての行で実行される理由を知っていますか?同様の結果を得るために行数を減らすために、クエリ内(またはテーブル内)で何を変更できますか?

4

2 に答える 2

5

表示されている行数は、調査する行数の見積もりにすぎません。クエリを実行するときに調べられる実際の行数と常に等しいとは限りません。

特に:

行数を見積もる際にLIMITは考慮されません。検査される行数を制限するLIMITがある場合でも、MySQLは完全な数を出力します。

ソース

クエリが実際に実行されるとき、1つの行だけが調べられます。

于 2012-11-14T18:23:26.253 に答える
0

サブセレクトを使用するために編集:

主キーが "my_id" であると仮定して、 を使用しますWHERE。例えば:

select * from mytable
where my_id = (
select max(my_id) from mytable
)

これは最初は効率が悪いように見えますが、explain の結果はそのままで、1 行だけが返され、インデックスを読み取って最大を見つけます。MySQL のパーティション化されたテーブルに対してこれを行うことはお勧めしません。

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   PRIMARY mytable const   PRIMARY PRIMARY 4   const   1    
2   SUBQUERY    NULL    NULL    NULL    NULL    NULL    NULL    NULL    Select tables optimized away
于 2012-11-14T18:21:54.330 に答える