[pgsql-jp: 29494] Re: INSERTの速度UP に関して
Tadashi Kanbayashi
Tadashi.Kanbayashi @ toppan.co.jp
2003年 3月 28日 (金) 17:47:44 JST
杉田様
ありがとうございます。
KANです。
下記の件で、エラーにならなかった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';
----- Original Message -----
送信者 : <sugita @ sra.co.jp>
宛先 : <pgsql-jp @ ml.postgresql.jp>
送信日時 : 2003年3月28日 17:28
件名 : [pgsql-jp: 29493] Re: INSERTの速度UP に関して
> 杉田です。
>
> From: "Tadashi Kanbayashi" <Tadashi.Kanbayashi @ toppan.co.jp>
> Subject: [pgsql-jp: 29492] Re: INSERTの速度UP に関して
> Date: Fri, 28 Mar 2003 16:08:26 +0900
>
> ;;; そこで質問ですが、この場合、
> ;;; FROM句にテーブルをカンマ区切りで羅列して、
> ;;; WHERE句に結合条件を記述するで良いでしょうか。
>
> はい、そうです。
>
> ;;; とりあえず、単純に試したところ、60分掛かっていたのが50秒で
> ;;; 返ってきました・・・。JOINを使うより、まずは、プランベースにお任せで
やった
> ;;; ほうが
> ;;; 良いのでしょうか。
>
> まずは、サーバに任せるのがいいのではないかと考えています。
>
> ;;; JOINを使用したFROM句の書き方ですが、
> ;;;
> ;;; FROM
> ;;; (テーブルA INER JOIN テーブルB ON テーブルA.カラム1 = テーブ
ルB.カ
> ;;; ラム1)
> ;;; INER JOIN テーブルC ON テーブルA.カラム2 = テーブルC.カラ
ム2
> ;;; INER JOIN テーブルD ON テーブルC.カラム3 = テーブルD.カラム3
> ;;; LEFT JOIN テーブルE ON テーブルD.カラム4 = テーブルE.カラム4
> ;;; AND テーブルE.カラム5 = テーブルA.カラム5
> ;;; AND テーブルE.カラム6 = テーブルB.カラム6
> ;;;
> ;;; のように、 書けるでしょうか。
> ;;; 3つ以上のテーブルの結合の場合は、括弧でくくったINERを1テーブルとみ
なして
> ;;; 結合させる
> ;;; と思うので、書けないと思えるのですが、psqlで実行する際にエラーになり
ませ
> ;;; ん。
>
> エラーにならなかったのをそのまま見せてもらえますか?
>
> ;;; 例えば、上記のような書き方が、処理速度に影響を与えるということもある
でしょ
> ;;; うか。
>
> EXPLAIN/EXLAIN ANALYZE、7.3 以上ならば psql の \timing で実測して確認す
るの
> がいいと思います。実行していないクエリーは何をするか分かりません。
>
>
> Kenji Sugita
>
>
---
T.Kan
pgsql-jp メーリングリストの案内