POSTGRESQL 検索スピードが遅い
テーブル結合検索、インデックス使えない原因を
Aテーブルは200000件のデータがあり、Bテーブルは4000000件のデータがあります。
テーブルA(ヘッダ)
A001 NUMBER(10) NOT NULL,
A002 NUMBER(8) NOT NULL,
A003 CHARACTER(2) NOT NULL,
...
PRIMARY KEY(A001)
INDEX A1(A002, A003)
テーブルB(明細)
B001 NUMBER(10) NOT NULL,
B002 NUMBER(3) NOT NULL,
B003 NUMBER(7) NOT NULL,
...
PRIMARY KEY(B001,B002)
INDEX A1(B001)
SELECT A.A001, B.B003 FROM A, B
WHERE A.A001 = B.B001
AND A.A002 >= 20090728 AND A.A002 <= 20090801
AND A.A003 = '01'
実行計画を見ると、Bテーブルのインデックスが使わなかった。
同じSQLで、条件だけ変わると、Bテーブルのインデックスが使った。
SELECT A.A001, B.B003 FROM A, B
WHERE A.A001 = B.B001
AND A.A002 >= 20090728 AND A.A002 <= 20090731
AND A.A003 = '01'
原因を知りたいです。
また、他のHPからテーブルの結合の説明がありました、
直積結合の回避
* 直積結合は、結合対象の2つのテーブルの全レコードの組み合わせを戻す処理
* SQLが複雑で、結合条件や絞込み条件に漏れがあると直積結合が選択されるかも
tableA = 1000 件、 tableB = 2 万件 の直積結合 1,000 * 20,000 = 20,000,000 2000 万件処理されてしまう が、結果が正しいと気付かない事も。 データ量が増加すれば、致命的な性能劣化に
参考URL:
http://www.slideshare.net/kwappa/20090107-postgre-sqlsql-presentation
上記のこと教えていただきたいんです、お願いします。
お礼
なんという最速な返答。 ありがとうございます。 最後に す がついてるんだ