スマートフォン用の表示で見るポクポクポクッとしてツナッ2011-11-13SQLite3でdatetimeなTEXTをなるべく高速に探す研究でSQLiteを使ってる。ファイル1つでポータブル、受け渡しも楽だしバージョン管理もできるし割りと気に入ってる。日付のデータを大量に扱うのが遅くて困ったので速くする方法を調べた。インデックスが効くようにしたい。対応する日時を表す型は存在しません。型の列に日付データを作成します。HH:MM:SSみたいな書式の文字列を日付とみなす。REAL)はよくあるUnixエポックからの差で表す。あるDBのスキーマと合わせるためにTEXT型でやることにする。日本時間しか使わないし生クエリを書きやすいのはいいけど、実際使う時に文字列をパースしてTime型みたいなのにするんだから最初から数字のほうがいいと思う...。実際使うデータを模してこんなスキーマでやる。文字列とそれを記録した時刻が大量に並んでる。text_datetime(date_time);今回はSQLite3.7.7.1、messageカラムはTimeをto_sしたやつで代用した。100万件レコード生成に使ったやつ。ろうじで雰囲気は伝わってくるけどよく分からない、勘で読む感じになる。言ってるので使われてるんだと思います。LIKEで探す柔軟にパターンが指定できるけど普通インデックスが効かない*2。便利な雰囲気を出してるけど遅いから騙されてはいけない。sqliteしたやつなら使えるけどWindowsの人に渡して使うのでよく分からないし頼らないほうがいいと思う。rows)GLOBで探すインデックス効くことが多い。各年の11月11日のおやつの時間の記録を取ろうとしてもLIKEはインデックスが効かないけど、GLOBなら高速に取ってこれる。rows)前方一致じゃなきゃ効かないと思ってたけど、最初にワイルドカードがこなければ効いてるみたい。notとか使うと効かなくなる。15:*に効く理屈がよく分からない、気になる。Betweenで探す特定の範囲の時間、たとえばおやつを食べた前後15分とかを取ってくるのに使う。