« 台北遠征2007(4)〜席だけCで帰国 | メイン | ISO3166/GoogleMaps台湾・タイ拡大 »
2007年05月05日
postgreSQLアップグレード |
自宅にて西洋がてら、帰国荷物の整理。一段落ついたところで、F案件実装再開。postgreSQLのアップグレード(v7.4→v8.2.3)をソースからコンパイル。 データ移行はpg-dumpallコマンドで吸い上げてから、psqlコマンドで落としこんだ。
カテゴリ検索用に配列内を検索(LIKE検索含む)しようとしたが、実装はできたものの、サーチ速度が遅い。EXPLAINコマンドでチェックしたらコストが260だった。うーむ、これでは商用には無理だ。視点を変えてこれらのデータを別のテーブルで管理させ、IDでリンクさせる手法にした。するとコストは30程度に低下し、実用的になった。従来のテーブルはある種の属性を6エントリ持ち、1つ1つについて以下のようにSQL文を組んでいた。
(テーブル内容 抜粋)
id int,
type1 int,
type2 int,
type3 int,
type4 int,
type5 int,
type6 int,
:
(sql)
select target from tablename where type1 = 50 or type2 = 50 or type3 = 50 or type4 = 50 or type5 = 50 or type6 = 50 ...
今回属性が7以上必要となり、現在のテーブルでは保守性、速度性に劣るので、別途属性用のテーブルを作成、複合検索とした。
(新規テーブル) subtable
id int,
type int
(両テーブルのidはリンクする)
SQL文も以下の通りすっきり?させた。
select target from tablename where id IN (select id from subtable where type = 50) ...
これが最適解かはわからないが しばしぼぉーっと様子を見ようと思う。
2008:
投稿者 onsenfan [ Linuxサーバ, プログラミング ] : 2007年05月05日 23:49
この記事が役に立った/おもしろいと思ったら、ワンクリックで応援お願いします
トラックバック
このエントリーのトラックバックURL:
http://blog.odorokutamegoro.com/cgi-bin/mt/mt-tb.cgi/1895_3921862683398