mysql:8460
From: "ta ma" <"ta ma" <chihuahuatyan2@xxxxxxxxxx>>
Date: Tue, 09 Dec 2003 16:52:22 +0900
Subject: [mysql 08460] Re: MySQL はどのように LIMIT を最適化するか?について
CHIWAKOです > -------------------- > 5.2.8 MySQL はどのように LIMIT を最適化するか? > > ・もし LIMIT # を ORDER BY と共に使用するなら, MySQL は最初の # 行を見つけ た > らすぐに、全テーブルのソートは行わずに、ソートを終わらせます。 > -------------------- 日本語の解釈がなかなかできなくて、かわじさんの説明で納得しました。 現実には経験から意図したとおり日付順で指定件数だけ取り出せます。 ただ今まで偶然取り出す順番(UPDATEされなければ大体INSERT順でしょうか?)と ソートがたまたまあっていて、実は私の勘違いだったのかと思ってしまいました。 ソート法まで考えてませんでしたが、もしはじめに順番の低い方から見つけていく ソート法が取られているなら、最後までやらずに終えてよし。という意味ですね? せっかくなので、実際にテーブルを作って確かめてみました。 バージョンは4.0.14 OSはwin2000で、配布されていたバイナリ版を解凍したものです。 全データ mysql> select bno,date1 from test; +------+---------------------+ | bno | date1 | +------+---------------------+ | 1 | 2003-12-09 17:29:55 | | 2 | 2003-12-09 18:31:32 | | 3 | 2003-12-09 19:31:32 | | 4 | 2003-12-09 18:31:32 | | 5 | 2003-12-10 02:31:32 | | 6 | 2003-12-10 01:31:32 | | 7 | 2003-12-09 22:31:32 | | 8 | 2003-12-10 12:31:32 | | 9 | 2003-12-10 07:31:32 | | 10 | 2003-12-10 23:31:32 | | 11 | 2003-12-10 06:31:32 | | 12 | 2003-12-10 13:31:33 | +------+---------------------+ 12 rows in set (0.05 sec) オフセット5番目から5件日付の順で mysql> select bno,date1 from test order by date1 limit 5,5 ; +------+---------------------+ | bno | date1 | +------+---------------------+ | 6 | 2003-12-10 01:31:32 | | 5 | 2003-12-10 02:31:32 | | 11 | 2003-12-10 06:31:32 | | 9 | 2003-12-10 07:31:32 | | 8 | 2003-12-10 12:31:32 | +------+---------------------+ 5 rows in set (0.02 sec) オフセット5番目から5件(ソート無し) mysql> select bno,date1 from test limit 5,5 ; +------+---------------------+ | bno | date1 | +------+---------------------+ | 6 | 2003-12-10 01:31:32 | | 7 | 2003-12-09 22:31:32 | | 8 | 2003-12-10 12:31:32 | | 9 | 2003-12-10 07:31:32 | | 10 | 2003-12-10 23:31:32 | +------+---------------------+ 5 rows in set (0.00 sec) ありがとうございました Regards --CHIWAKO _________________________________________________________________ 友達と24時間ホットライン「MSN メッセンジャー」、今すぐダウンロード! http://messenger.msn.co.jp