1

INFORMIX-SE:

私のユーザーは定期的に SQL スクリプト [REORG.SQL] を実行します。このスクリプトは、テーブルからすべての行をソートされた順序で 2 つの別々のファイル (アクティブと非アクティブ) にアンロードし、テーブルを削除し、テーブルを再作成し、ソートされたロードファイルをそこにロードします。アンロードファイルをソートしたのと同じ列にクラスターインデックスを作成し、他のサポートインデックスを作成し、その統計を更新します。

( SE: 'bcheck -y' anomaly のREORG.SQL スクリプトを参照してください )

( クラスターインデックスが pk_id[serial]=fk_id[int] ではなく名前による理由については、customer.pk_name Join transactions.fk_name 対 customer.pk_id [serial] Join transactions.fk_id [integer]も参照してください)

私の REORG.SQL スクリプトでは、インデックス ファイルの一貫性の問題が発生していたので、CLUSTER INDEX が関係しているのではないかと疑い、クラスタリングなしでインデックスを作成したところ、問題は解消されました。

ここで私の質問は次のとおりです。顧客のフルネームでソートされたすべてのトランザクションデータを新しく作成されたテーブルにロードできた場合、実際には行がすでに同じ順序でソートされている場合に CLUSTER INDEX を作成する必要がありますか?クラスタリングが達成することは?..新しい行が追加されると、クラスタ化インデックスがクラスタリングを失い始めることを知っています.それで、クラスタインデックスを作成する利点は何ですか?..クエリオプティマイザはクラスタリングと非クラスタリングを利用しますか.行が本質的に同じクラスター化された順序である場合のインデックス?..テーブルをクラスター化するときに IDX/DAT ファイルの問題に遭遇した人はいますか?..おそらく私の SQL スクリプトに何か問題がありますか? (SQL スクリプト コードを確認して、何か間違っているかどうかを確認してください。)

4

1 に答える 1

2

このスクリプトは、アクティブなトランザクションと非アクティブなトランザクションを 2 つの異なるファイルにアンロードし、各ファイルを顧客名で並べ替えます。次に、それらをテーブルにロードし直します。最初にアクティブなトランザクション、次に非アクティブなトランザクションが続きます。次に、クラスター化インデックスが顧客名に作成されます。問題は、クラスター化されたインデックスを構築するときに、データベースが戻って顧客名で物理的な行を並べ替える必要があることです。各アンロード ファイルは個別に顧客名で並べ替えられますが、2 つをまとめると、結果は顧客名で並べ替えられず、データベースの作業が増えます。アクティブなトランザクションと非アクティブなトランザクション用に別のファイルが必要な場合を除き、すべてのトランザクションを単一のファイルにダンプして、顧客名順に並べ替えてから、その単一のファイルからテーブルを再ロードしてみてください。

クラスター化インデックスが本当に必要かどうかについては、データのフェッチに必要な I/O の数を減らすのに役立つはずなので、その列を使用してクエリを実行する場合、クラスター化インデックスは価値があります。通常、クラスター化インデックスは単調に増加する列に作成されるため、おそらく TRX_NUM はクラスター化インデックスで名前を付ける列として適切に機能します。

共有してお楽しみください。

于 2010-08-05T11:29:44.003 に答える