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

Yoshio Kano kano @ arcadia21.com
2006年 8月 21日 (月) 15:05:44 JST


こんにちわ。
加納と申します。
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	|





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