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