mysql:8458
From: "ta ma" <"ta ma" <chihuahuatyan2@xxxxxxxxxx>>
Date: Tue, 09 Dec 2003 13:03:25 +0900
Subject: [mysql 08458] MySQL はどのように LIMIT を最適化するか?について
MySQL Reference Manual を読んで、ご質問したいことがあります。 -------------------- 5.2.8 MySQL はどのように LIMIT を最適化するか? ・もし LIMIT # を ORDER BY と共に使用するなら, MySQL は最初の # 行を見つけた らすぐに、全テーブルのソートは行わずに、ソートを終わらせます。 -------------------- ということは 最新のものを10件だけ表示したいとき SQL: SELECT * from TABLE1 order by DATE1 desc limit 0,10 このときまず10件みつけてからその10件の中で日付順にソートするのでしょうか? それともテーブルに入っている全データの中で新しい日付のものを10件返してくるの でしょうか? 今まで都合よく後者のつもりでいましが、マニュアルの「最初の # 行を見つけたら すぐに、全テーブルのソートは行わずに、ソートを終わらせます。 」ということは 前者のほうのような気がします ORACLEではLIMITがなく、 SELECT * from TABLE1 where ROWNUM <10 order by DATE1 desc; 全データを並び替えてから結果の行番号が10行目までだけ返す というようにしますね MYSQLでは LIMITとORDER BYの順番なんですが、一緒に使うとまずLIMITでその結果をORDER BY するんでしょうか? 最新の日付順に10件欲しいときはLIMITを使わずに、まずORDER BYして、その結果を クライアント側で10件だけ使用するという方法になるんでしょうか? Regards --CHIWAKO _________________________________________________________________ 友達と24時間ホットライン「MSN メッセンジャー」、今すぐダウンロード! http://messenger.msn.co.jp
-> 8458 2003-12-09 13:03 ["ta ma" <chihuahuaty] MySQL はどのように LIMIT を最適化するか?について 8459 2003-12-09 15:16 ┗["Kawaji, Shinya" <ka]