[前][次][番号順一覧][スレッド一覧]

mysql:8459

From: "Kawaji, Shinya" <"Kawaji, Shinya" <kawaji@xxxxxxxxxx>>
Date: Tue, 09 Dec 2003 15:16:06 +0900
Subject: [mysql 08459] Re: MySQL はどのように LIMIT を最適化するか?について

かわじ、です。


> --------------------
> 5.2.8 MySQL はどのように LIMIT を最適化するか?
> 
> ・もし LIMIT # を ORDER BY と共に使用するなら, MySQL は最初の # 行を見つけた
> らすぐに、全テーブルのソートは行わずに、ソートを終わらせます。 
> --------------------

ソースを読んでいないので、万が一外してたら申し訳ないんですが、
ここで言わんとしていることは

  MySQL では最適化のために、limit と order by がともに使用されていたら、
  いちいち全部の行をソートしてから limit するのではなくて、
  最初の limit 分だけ見つかるようにソートします

という意味ではないでしょうか?

つまり、id というカラムでソートするとして、100行あった場合、
limit 10 とすると、id が少ないものから順に 10行見つければ、
あとの 90行の id の順番なんて、どうでもいい(計算しなくていい)という
ことだと思います。

単に order by id の場合     → id を全てソートする
order by id limit 10 の場合 → id を少ないものから10行見つける
                           (他の行はソートしない)


なので、

> 最新の日付順に10件欲しいときはLIMITを使わずに、まずORDER BYして、その結果を
> クライアント側で10件だけ使用するという方法になるんでしょうか?

という必要はなくて、「order by の後で limit は評価される」という
認識で間違いないと思います。


私の認識が間違っていましたら、どなたかお知らせくだされば幸いです。


[前][次][番号順一覧][スレッド一覧]

      8458 2003-12-09 13:03 ["ta ma" <chihuahuaty] MySQL はどのように LIMIT  を最適化するか?について
->    8459 2003-12-09 15:16 ┗["Kawaji, Shinya" <ka]