[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 メーリングリストの案内