- 締切済み
アナライズとインデックス作成どちらが先か?
Oracle10gで、テーブルにデータを入れた後、以下はどちらを先に実行すべきでしょうか。 ・アナライズ(統計情報の取得) ・プライマリキーとインテックスの作成
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- entree
- ベストアンサー率55% (405/735)
> 先に統計情報を取得してからインデックス(プライマリキー設定も含む)を > 作成すれば、インデックスの統計情報が取得されないことになってしまいます。 これは誤りでした。表の統計情報が存在していれば索引作成時には 索引の統計情報が自動的に取得されるようです。 明示的に取得することが望ましいことには変わりありませんが。
- nora1962
- ベストアンサー率60% (431/717)
補足すると、実運用に入ってからも ・定期的なアナライズ ・特定のSQLで遅延が起きていないかの確認 ・INDEXが使用されているかの監視 が必要になります。
- entree
- ベストアンサー率55% (405/735)
先に統計情報を取得してからインデックス(プライマリキー設定も含む)を 作成すれば、インデックスの統計情報が取得されないことになってしまいます。 それは意図することではないでしょうから、 1. プライマリキーとインテックスの作成 2. アナライズ(統計情報の取得) が良いのではないでしょうか。
- mitoneko
- ベストアンサー率58% (469/798)
あえて順番をと言うなら、 ・プライマリーキーの作成(本来、テーブルを作成した時にセットで作成すべきもの。何がプライマリーキーになるかは、テーブル設計をした段階で必然的に決まっているはず。普通は、create table文のprimary key句は、オプションでなく必須と思った方が良いくらいです。) ・データの投入。 ・アナライズ(この結果で、どのフィールドに追加インデックスをつけるかを分析・決定する。) ・インデックスの作成 ・定期的なアナライズ(これは、オプティマイザーのための統計情報更新です。) でしょうか。これより更に前の業務分析がきっちり出来ていれば、テーブル設計とセットである程度のインデックス構成は浮かび上がっているものですけどね。その場合は、ある程度のインデックス生成はテーブル生成とセットでしょうね。 特に、ユニークインデックスに関しては、効率化よりも、制約として重要です。その筆頭がプライマリーキーで、これが決定されていないと、外部制約などがくめなくなってしまいます。当然ですが、制約は、データを投入する前に決定と設定がなされている必要があります。(制約が一番仕事をするのはデータの投入時ですからね。後で制約をつけた時にデータエラーを指摘されるより、データ投入時に見つけてもらった方が良いに決まってますから。)
- nora1962
- ベストアンサー率60% (431/717)
通常は、事前にデータ分析して検索条件、データの偏り、カーディナリティを調べてから ・プライマリキーとインテックスの作成 ・アナライズ(統計情報の取得) だと思います。 どのインデックス使うのが有効かなどを統計情報から得るのがアナライズの目的ですから。