[pgsql-jp: 29516] Re: INSERTの速度UP に関して
Tadashi Kanbayashi
Tadashi.Kanbayashi @ toppan.co.jp
2003年 3月 31日 (月) 12:04:32 JST
杉田様
お疲れさまです。
ありがとうございます。
KANです。
以下の件ですが、動作しました。
結果も変わりませんでした。
処理時間は相変わらず遅く、約75分かかりました。
しかし、文法的に正しいのでしょうか?
どうもJOINの書き方がプランナを混乱させている気がするのですが?。
とりあえず、JOINを使わないようにすると約3分で結果が返ってくるので、
JOINを使わないSQLに書き換えようと思いますが、それでも約3分かかります。
INDEXをはること以外で、何か策はないでしょうか。
テーブル結合の処理の高速化としては、
(1)プランナ任せ(コストベース)
(2)INDEXの追加
(3)JOINで結合手順を強制的にいじる(ルールベース)
で行ない、それでもだめそうな場合は、SQLを分割(処理をわける)することが必要
でしょうか。
どんなSQLでも、高速化の限界はあると思いますが、そのときの目安(閾値)が
あれば教えていただきたく。
ちなみに、結合しているテーブルの規模は以下の通りです。
t_cidinf:6990
t_contopen:50679
t_cpinf:130
t_cpshare:248
t_miminf:249
t_payinf:102
t_tidinf:295
t_paycid:3271
t_paycidgroup:6986
t_hanroinf:21
t_shimebi:80
t_bill_detail:150548
教えてください。
お願いします。
----- Original Message -----
送信者 : <sugita @ sra.co.jp>
宛先 : <pgsql-jp @ ml.postgresql.jp>
送信日時 : 2003年3月28日 18:15
件名 : [pgsql-jp: 29495] Re: INSERTの速度UP に関して
> 杉田です。
>
> From: "Tadashi Kanbayashi" <Tadashi.Kanbayashi @ toppan.co.jp>
> Subject: [pgsql-jp: 29494] Re: INSERTの速度UP に関して
> Date: Fri, 28 Mar 2003 17:47:44 +0900
>
> ;;; 下記の件で、エラーにならなかったSQLです。
> ;;; (長いので、FROM句以外はいくらか削除してあります。)
> ;;;
> ;;; お願いします。
> ;;;
> ;;; SELECT
> ;;; t_cidinf.cid
> ;;; FROM
> ;;; (
> ;;; (
> ;;; (
> ;;; (
> ;;; (
> ;;; (
> ;;; (t_cidinf INNER JOIN t_contopen
> ;;; ON t_cidinf.cid = t_contopen.cid
> ;;; ) INNER JOIN t_cpinf
> ;;; ON t_contopen.cpcd = t_cpinf.cpcd
> ;;; ) INNER JOIN t_cpshare
> ;;; ON t_cpinf.cpcd = t_cpshare.cpcd
> ;;; ) INNER JOIN t_miminf
> ;;; ON t_cpshare.mid = t_miminf.mid
> ;;; ) INNER JOIN t_payinf
> ;;; ON t_cpinf.payinfcd = t_payinf.payinfcd
> ;;; ) INNER JOIN t_tidinf
> ;;; ON (t_cidinf.tid = t_tidinf.tid)
> ;;; AND (t_miminf.mid = t_tidinf.mid)
> ;;; ) INNER JOIN t_paycid
> ;;; ON t_miminf.mid = t_paycid.mid
> ;;; ) INNER JOIN t_paycidgroup
> ;;; ON (t_paycidgroup.cid = t_cidinf.cid)
> ;;; AND (t_paycid.paycid = t_paycidgroup.paycid)
> ;;; INNER JOIN t_hanroinf
> ;;; ON (t_hanroinf.pid = t_contopen.pid)
> ;;; INNER JOIN t_shimebi
> ;;; ON (t_tidinf.kakincd = t_shimebi.kakincd)
> ;;; AND (t_contopen.pid = t_shimebi.pid)
> ;;; LEFT JOIN t_bill_detail
> ;;; ON t_contopen.pid = t_bill_detail.pid
> ;;; AND t_bill_detail.mid = t_miminf.mid
> ;;; AND t_bill_detail.tid = t_tidinf.tid
> ;;; AND t_bill_detail.cid = t_cidinf.cid
> ;;; AND t_bill_detail.billterm = '200303'
> ;;; WHERE
> ;;; t_contopen.pid = 'ZZZ';
>
> この形ならば、最初の方の INNER の () 群を取り去っても動きませんか?
>
>
> Kenji Sugita
>
>
>
>
>
---
T.Kan
pgsql-jp メーリングリストの案内