[pgsql-jp: 29492] Re: INSERTの速度UP に関して

Tadashi Kanbayashi Tadashi.Kanbayashi @ toppan.co.jp
2003年 3月 28日 (金) 16:08:26 JST


杉田様

ありがとうございます。
お疲れさまです。
KANです。

JOINを使わない書き方にして試してみます。

そこで質問ですが、この場合、
FROM句にテーブルをカンマ区切りで羅列して、
WHERE句に結合条件を記述するで良いでしょうか。

とりあえず、単純に試したところ、60分掛かっていたのが50秒で
返ってきました・・・。JOINを使うより、まずは、プランベースにお任せでやった
ほうが
良いのでしょうか。

あともう1つ質問です。お願いします。

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で実行する際にエラーになりませ
ん。

例えば、上記のような書き方が、処理速度に影響を与えるということもあるでしょ
うか。


以上

教えてください。
お願いします。

----- Original Message -----
送信者 : <sugita @ sra.co.jp>
宛先 : <pgsql-jp @ ml.postgresql.jp>
送信日時 : 2003年3月27日 20:04
件名 : [pgsql-jp: 29490] Re: INSERTの速度UP に関して


>   杉田です。
>
> From: "Tadashi Kanbayashi" <Tadashi.Kanbayashi @ toppan.co.jp>
> Subject: [pgsql-jp: 29489] Re: INSERTの速度UP に関して
> Date: Thu, 27 Mar 2003 19:43:00 +0900
>
> ;;; すいません。INSERTにではなく、
> ;;; INSERT文中のSELECT文が遅いようでした。
> ;;; そこで、一番時間がかかるケースで、
> ;;; SELECT文のみを抽出してEXPLAIN ANALYZEで実行計画を取得してみました。
> ;;;
> ;;; SQLと、実行計画をそのままお伝えするのが良いと思いましたが、
> ;;; 長すぎるので、かなり雑な情報ですが、ポイントになりそうな情報を
> ;;; まずはお伝えします(これでは、わからないという話しかもしれませんがす
いませ
> ;;; ん)。
> ;;;
> ;;; (1)INDEX SCANが選ばれているか
> ;;;  →選ばれているようです(時間は要してません)。
> ;;; (2)Merge Joinの回数
> ;;;  →5回(約4000ミリ秒のものが4回と、約3800000ミリ秒のものが1回)
ありま
> ;;; す。
> ;;; (3)Hash Joinの回数
> ;;;  →3回(約5000ミリ秒のものが3回)あります。
>
>   4000 や 3800000 は、EXPLAIN ANALYZE の cost の値のことだと思います。こ
れらの数値は、
> 秒でなくて、ディスクページアクセスに換算したコストです。
>
>   "PostgreSQL ユーザガイド" の "Chapter 11. 性能に関するヒント" に、説明
があり
> ます。
>
> ;;; 以上より、テーブルを6個結合しているのですが、どうも、結合に関すると
こで
> ;;; 時間がかかっているようです。
> ;;;
> ;;; テーブル結合は、
> ;;; FROM(((((((INNER JOIN・・・・) INNER JOIN ・・・) INNER
 JOIN
> ;;;  ・・・) INNER JOIN・・・) INNER JOIN・・・) INNER JOIN・・
・)
> ;;;     INNER JOIN・・・
> ;;; な感じで、複雑です(私が作ったものでないので余計に?です)。。。
>
>   このようにすると PostgreSQL では、書いた通りに実行されます (実行させる
ように
> できます)。こちらは、"PostgreSQL ユーザガイド" の "Chapter 11.3 明示的な
JOIN
> でプランナを制御する" に説明があります。"実行させるように" しようとしたこ
とが
> 合っていれば大丈夫ですが、食い違うと却って遅くなる場合もあります。
>
>   JOIN を使わない書き方にして、プランナの最適化に任せてみるのを試してみた
くな
> ります。
>
>
> Kenji Sugita
>
>

---
T.Kan





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