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