Recent StatusGeneral InfoTodaySunrise/Sunset[collapse/shrink]
Sapporo
06:43 →
16:53
Tokyo
06:36 →
17:13
Osaka
06:51 →
17:32
Hakata
07:10 →
17:54
Taipei
07:34 →
18:42
Beijing
08:17 →
18:40
Singapore
08:17 →
20:22
New Delhi
10:35 →
21:35
Moscow
14:12 →
23:16
Nairobi
12:43 →
00:52
Cairo
13:41 →
00:37
Istanbul
14:09 →
00:30
Athens
14:28 →
01:00
Budapest
15:01 →
00:53
Vienna
15:15 →
01:03
Prague
15:29 →
01:05
Berlin
15:38 →
01:04
Rome
15:16 →
01:33
Paris
16:11 →
01:58
London
16:28 →
01:59
Madrid
16:16 →
02:38
Lisbon
16:39 →
03:07
Rio de Janeiro
17:36 →
06:36
Sao Paulo
17:48 →
06:50
New York
20:59 →
07:20
Mexico City
22:08 →
09:32
San Francisco
00:07 →
10:39
Honolulu
02:04 →
13:23
Wellington
04:27 →
14:44
(in JST, GMT+9)
WeatherWorld NewsBookshelfScienceComputerPhilosophy/Thought |
Postgresqlの前方一致でインデックスが使われない場合右上に表示されてる辞書を作るにあたって,データベースが何か妙に遅いので原因を調べてみた。 キーボードからの入力があるたびにDBで前方一致検索をかけてるわけですが,そのクエリを分析させてみると, 折角インデックスが張ってあるのにシーケンシャルスキャンしてることがわかった。 このマシン,まぁVPSの最安プランで借りてるから,速度なんてそれほど期待できないだろう…とか思ってたんですが, それにしてもちょっと遅すぎる。例えば,”home”で始まる英単語を調べるのに,約150ミリ秒かかってた。(ちなみにテーブルサイズは11Mほど) だけどそれ以上に,折角作ってあるインデックスが使われてないってことが問題で,何でなのか調べてみることに。 すると,postgresqlではデータベースクラスタを作る際に,ロケールが指定されてるとLIKE/正則表現の前方一致検索でインデックスが使われないってことが判明。ちょっと前のMLだけど,Postgresql8.3でもそうみたい。 そこで,一旦今までのDBを構造とデータの両方ダンプさせてから, database$ initdb -E UTF-8 --no-localeして,再度ダンプデータを突っ込んでみた。やったのはそれだけ。
すると,今まで150msかかってた検索が, ここ何年もPostgres使ってるけど,全文検索用には ludia 入れてたりしたんで,あんまり LIKE 演算子のことは考えたことなかった。
というわけで,右上の辞書,何と日本語でも検索可能になりました! (こちらの都合で,漢字がある単語の場合は漢字でないとマッチしません)
まぁ DB 速くしても,色々あって結局殆ど変わらないんですけどねorz
追記 APC入れてサイト全体の速度を上げて,更にプログラムとSQLの無駄を出来る限り除いてったけど, どうしてもメモリが少ない所為で検索効率が悪くなるみたい。 さらに追記 LIKE演算子ならインデックスが使われてたんだけど,ILIKEだと使われてなかった。でもLIKEにすると,ちょっと使い心地が悪くなる。(本当は辞書に載ってるのに,大文字小文字の違いで出てこない場合がある。) なので, CREATE INDEX "インデックス名" ON "テーブル名" USING btree (LOWER("カラム名"::text)) とかして小文字でインデックスを作って, SELECT * FROM "テーブル名" WHERE LOWER("カラム名") LIKE LOWER('調べる文字列%') ってすると,インデックスを使い,かつ大文字小文字を無視した検索ができる。
|
Other LanguagesPhoto Updates
effects by jQuery Carousel
Recent Commentsyour comments are welcome!
Site StatusAccess CounterTOTAL
181895
(Now 3 clients are visiting here.)
Activity Meter
Activities classified with number of recent articles.
DictionaryLinks |
コメント