[pgsql-jp: 30290] Re: indexを使用しない/ 使用する違いは?

Genshirou Taki g_taki @ max-corporation.com
2003年 6月 30日 (月) 22:07:21 JST


g_takiです。

杉田さん、解説ありがとうございます。

説明不足だったかもしれませんので、さらに補足を

createdbからまったく同じ手順でデータ投入まで行い、
どちらも削除は一切行っておらず、
異なるのは、OSや、DBのバージョンなどだけです。

テスト環境と本番環境というつもりだったのですが、
都合上、まったく同じ環境を整えることができませんでした。

indexとなる、Primary Keyに入る数値も、EXCELで作成した連番で、CSVに書き出
したものをinsertしたものです。


杉田さんのおっしゃられた”分布傾向”という言葉の意味をちょっとgoogleで調
べただけでは理解できなかったのですが、
まったく同じ手順でデータを投入しても(削除は行っていない状態)、indexを使
用する/しないで違いが出るので、マニュアルでindexを使うように支持しなさい
ということでしょうか?


また、100万件以上入るのは別のテーブルで、
現時点で件数がはっきりしている小さな(3000件)テーブルで今回調べたところ、
違いが発覚したしだいです。
どちらも、運用段階では、insertは発生せず、更新のみありえるという条件はあ
ります。

>   オプティマイザのコスト計算の部分と、マニュアルの統計情報の所に必要な情報が在
> ります。 
> 
このあたりをもう少し詳しく調べてみようと思います。


#以下上手く文中に返信を押し込めないので、全文引用で申し訳ありません。

On Mon, 30 Jun 2003 21:33:23 +0900 (JST)
sugita @ sra.co.jp wrote:

>   杉田です。
> 
> From: Genshirou Taki <g_taki @ max-corporation.com>
> Subject: [pgsql-jp: 30286] indexを使用しない/ 使用する違いは?
> Date: Mon, 30 Jun 2003 20:19:06 +0900
> 
> ;;; サーバの環境によって、同じSQL文でもindexを使わない場合があるのでしょうか?
> 
>   あります。データ内容と量が同じでも、分布傾向が違えば、そう成り得ます。実際、
> 2000 万件のデータの場合に、シーケンシャルスキャンとインデックススキャンの閾値
> がデータ分布によって、15% の事も 1% の事もありました。
> 
> ;;; 2箇所の異なった環境に、同じSQLで発行したTableなどがあり、
> ;;; explain を行ったところ、環境Aでは、indexを使用していると表示されたのです
> ;;; が、環境Bではindexを使用していませんでした。
> 
>   オプティマイザのコスト計算の部分と、マニュアルの統計情報の所に必要な情報が在
> ります。 
> 
> ;;; vacuumdb -a -f -z を行っても結果は同じでした。
> 
>   データの散らばり具合はこれでは変わりません。マニュアルの統計情報の部分にどの
> ように統計情報が取られ、どのように実行計画に反映されるかが書かれています。場合
> によっては、クラスター化も有用な場合もあります。
> 
>   ただし、削除データに偏りがある場合に、サンプリング値が正しくなくなり、統計情
> 報のヒストグラムに歪みが出てオプティマイザの予測が違って来る事迄は書かれていま
> せん。しかしながら、7.2 以降は、予測が違っても実行計画に影響し難くはなってはい
> ます。
> 
>   DDL の設計が悪いと、7.2 より前では、統計情報が正しく判断できず、年を跨ぐと使
> わなくなる事もありました。7.2 以後でも設計が悪いと、実行計画の選択を間違える可
> 能性は減りますが、オプティマイザの予測はかなり違う事になる場合が在ります。例え
> ば、char(6) に年月日を入れる場合です。実際に、年を跨ぐデータを入れて EXPLAIN
> ANALYZE をすると分かります。
> 
> ;;; この例では3千件程度ですが、100万件以上のデータを投入する予定なので、
> ;;; そのときのパフォーマンス低下が気になります。
> 
>   100 万件を必要とするようなシステムならば、100 万件を実際のデータの発生と同じ
> データ分布で発生させて検証しなればなりません。素直な分布でも完全にランダムでも
> ないように実際の分布にする必要が在ります。難しくても、それしか方法はありません。
> 私がシステムを作るならば、そういう検証を絶対にします。
> 
> 
> Kenji Sugita                                      

-- 
Genshirou Taki <g_taki @ max-corporation.com>





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