MySQLのLIMIT,OFFSETが遅くなる
MySQLのLIMIT,OFFSETが遅いというお話。
といっても、100万件を超えるような大量データの場合じゃないと体感はできないですが。
MySQLのLIMIT,OFFSETを数百万件以上のテーブルで1000件ずつ処理をしていたのですが、最初の1000件だけ実行時間を計測して全体の処理時間を想定をだしてみたのですが、実際全部の処理をしてみると60分くらい誤差が…(–;
どうも後半に行けば行くほど遅くなるようです。
まぁ全部終わったのでいいのですが、調べてみるとLIMIT,OFFSETで件数を制限しているにもかかわらず、いちいちフルスキャンしているみたいなのです。
どういうことかというと、全部検索してデータを持ってきてから、必要な分を取り出しているような動きをしています。
INDEXなぞ、効いていない模様です。
そりゃ遅いでしょー、という感じで解決策をさがしてみたのですが、「INDEXを張ったフィールドをBETWEENで指定するのが吉」というのがありました。なるほどー。
…とおもったのですが、今回使っていた大量データのあるテーブルは連番のキーなどなく、単純にこの方法は使いづらく…。残念。もうしばらくいじることもないし、今回はあきらめるか(゚∀゚ )。