WEBサイトの製作、管理、とかの日記ブログです。

<<   2023年06月   >>
SunMonTueWedThuFriSat
    123
45678910
11121314151617
18192021222324
252627282930 
新着記事
カテゴリ
過去ログ
コメント
検索
たぶん、うまく修正できた
昨日の、
count(*) で分割して limit offset
から、
max(行番号) で分割して between
は、やっぱいまいちだったんだが、

limit offset
だと、
offset位置まで全部読むので、後ろのほうが遅くなってた。

between
だと、
指定範囲しか読み込まないから後方でも安定するが、
行番号はautoincrementの主キーだが、
複合キーがあるなら別だが、
betweenの他に条件がある場合、主キーから範囲抽出した後でディスクからwhereしなければいけないので、
50000行ディスクからwhereするとかなりきつい。
using indexになるなら50000行でも問題ない。


ってことだね。


だから、
autoincrementの主キーだけで抽出できる場合は、betweenなら後方でも安定する。

その他の場合は複合キーを用意すればいいのだが、
autoincrementの主キーと抽出用のキーを入れたインデックスは、
主キーがbigintだとかなりのサイズになるので避けたい。

ってわけで、
主キーだけで抽出できない場合は、
50000行じゃなくて5000行単位で分割すれば、
どの位置でもインデックスから5000行抽出した後で追加条件をディスクからのwhereで済むから安定するね。


これでも2秒は厳しい場合もあるかとは思うが、
安定してそこそこの速度出るはずだから、
40秒超えとかでタイムアウトするようなことはないはず。

この記事へのコメント
名前:
URL
コメント:
この記事へのトラックバック :
whblog 1.7