[pgsql-jp: 37442] Re: SQLの実行速度について

Hisakazu Nakai nakai @ shinko.co.jp
2006年 8月 22日 (火) 09:35:17 JST


中井です。

更新の頻度がわからないのですが、最新データにフラグを付ける手も
あるんではないかと思ったのですがいかがでしょうか。
最新のフラグを付けてinsertする前に、既存の最新のフラグを落とす
(update)するだけなので、そんなにコストも掛からないのではないか
と思います。もちろん最新フラグと商品IDにインデックスをつけます。

実は、データ件数は少ないのですが似たようなことがありました。
検索速度を上げるために、履歴データ表と最新のものだけのデータ表を
分けたのですが、今でも正しかったのかどうか悩んでいます。

Yoshio Kano wrote:
> こんにちわ。
> 加納と申します。
> SQLの実行速度の問題で悩んでおります。
> 
> ●実行環境(テストサーバ)
> postgres 7.3.9
> perl 5.6.1
> apache 1.3.33
> 
> 下記に示すように、商品の状態履歴テーブルがあります。
> 状態履歴テーブルは、商品ID/状態/コメント/変更日付をどんどん蓄積
> しています。(※実際には他のデータも格納しています。)
> この状態履歴テーブルには40万件ほどのデータがあります。
> また、レコードID、商品IDと変更日付にインデックスを設定しています。
> 
> これらの状態履歴テーブルの各商品IDの最新のデータを取得したいと
> 思っているのですが、もっと早くデータを取得できないものかと悩んで
> おります。
> 今使用しているSQLは以下の通りです。
> 
> ●SQL
> ● → 状態履歴テーブル = history
> ● → EXPLAIN ANALYZE 10回平均 で11,740 msec
> SELECT ... FROM
> (SELECT MAX(id) AS id,itemid FROM history GROUP BY itemid ) AS t1
> LEFT JOIN history AS t2 ON (t2.id = t1.id)
> 
> 
> そもそも、このテーブルの設計自体に問題があるのかもしれませんが、
> どなたか良い知恵がありましたらよろしくお願いいたします。
> 
> 
> ●状態履歴テーブル(40万件/IDとCHANGE_DATEにインデックス)
> |NO	|ID	|STATUS	|OPTION TEXT	|CANGE_DATE	|
> | 1	|a2	|stats1	|...........	|2006-07-05	|
> | 2	|b3	|stats4	|...........	|2006-06-22	|
> | 3	|a2	|stats2	|...........	|2006-07-25	|
> | 4	|a2	|stats3	|...........	|2006-08-12	|
> | 5	|b3	|stats2	|...........	|2006-08-16	|
> | 6	|c4	|stats3	|...........	|2006-07-10	|
> 
>  ↓
> 
> ●抽出結果
> |NO	|ID	|STATUS	|OPTION TEXT	|CANGE_DATE	|
> | 1	|a2	|stats3	|...........	|2006-08-12	|
> | 2	|b3	|stats2	|...........	|2006-08-16	|
> | 3	|c4	|stats3	|...........	|2006-07-10	|
> 
> 


-- 
-=-=-=-=  SHINKO ELECTRIC INDUSTRIES CO., LTD.           =-=-=-=-
=-=-=-=-    Research & Development Div.                  -=-=-=-=
-=-=-=-=      Infomation Technology Research Dept.       =-=-=-=-
=-=-=-=-  Name:Hisakazu Nakai          TEL:026-263-3922  -=-=-=-=
-=-=-=-=  Mail:nakai @ shinko.co.jp      FAX:026-263-4562  =-=-=-=-



pgsql-jp メーリングリストの案内