Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (P ~ Z)

 

REORGANIZE TABLE 文

この文は、データベースへの連続アクセスという要件があるために、データベース全体の再構築ができない場合に、テーブルの断片化を解除するために使用します。

構文
REORGANIZE TABLE [ owner.]table-name
[ { PRIMARY KEY
| FOREIGN KEY foreign-key-name
| INDEX index-name } ]
パラメータ

次のいずれかの値に従って、テーブルを再編成します。

  • PRIMARY KEY 句   テーブルのプライマリ・キーのインデックスを再編成します。

  • FOREIGN KEY 句   指定の外部キーを再編成します。

  • INDEX 句   指定のインデックスを再編成します。

備考

テーブルが断片化されると、パフォーマンスが妨害されることがあります。この文を使って、テーブル内のローの断片化を解除したり、DELETE によって散在したインデックスを圧縮したりします。また、テーブルとそのインデックスを記録するために使われる総ページ数と、インデックス・ツリーに含まれるレベル数も減らします。ただし、データベース・ファイル全体のサイズは小さくなりません。sa_table_fragmentation と sa_index_density の各システム・プロシージャを使用して、テーブル対象の処理を選択することをおすすめします。

インデックスまたはキーを指定しない場合は、再編成処理によってロー・グループが削除されてから再挿入され、テーブル内のローの断片化が解除されます。グループごとに、テーブルの排他ロックが取得されます。グループの処理が完了すると、他の接続がテーブルにアクセスできるように、ロックが解除され、再取得されます (必要な場合は待機します)。グループの処理中はチェックポイントが中断されます。グループが終了すると、チェックポイントが発生することがあります。各ローはプライマリ・キーの順に処理されます。テーブルにプライマリ・キーがない場合は、エラーが発生します。処理済みのローはテーブルの最後に再挿入され、処理の最後にローがプライマリ・キーによってクラスタされます。必要な作業量は、最初にローが断片化されていた程度に関係なく同じなので注意してください。

インデックスまたはキーを指定すると、そのインデックスが処理されます。オペレーション中は、テーブルの排他ロックが保持され、チェックポイントは中断されます。他の接続がテーブルにアクセスしようとすると、blocking オプションの設定に応じてブロックされるか失敗します。ロック期間は、排他ロックを取得する前にインデックス・ページをあらかじめ読み込んでおくことで最短に抑えられます。

再編成で多数のページが修正される場合があるため、チェックポイント・ログが大きくなる可能性があります。これにより、データベース・ファイルのサイズが大きくなる可能性がありますが、チェックポイント・ログがシャットダウン時に削除され、ファイルはその時点でトランケートされるため、サイズは一時的に大きくなるだけです。

この文は、トランザクション・ログには記録されません。

文またはトランザクションのスナップショットを使用する、WITH HOLD 句を使用して開かれたカーソルがある場合、この文は実行できません。スナップショット・アイソレーションを参照してください。

パーミッション
  • テーブルの所有者であるか、DBA 権限が必要です。

  • Windows Mobile ではサポートされません。

関連する動作

再編成を開始する前に、チェックポイントが実行され、空きページ数を最大限に増やそうとします。また、REORGANIZE TABLE 文の実行時は約 100 ローごとに暗黙的なコミットがあるため、大規模なテーブルを認識すると複数のコミットが実行されます。

標準と互換性
  • SQL/2003   ベンダ拡張。

次の文は、Employees テーブルのプライマリ・キーのインデックスを再編成します。

REORGANIZE TABLE Employees
PRIMARY KEY;

次の文は、Employees テーブルのテーブル・ページを再編成します。

REORGANIZE TABLE Employees;

次の文は、Products テーブルのインデックス IX_prod_name を再編成します。

REORGANIZE TABLE Products 
   INDEX IX_product_name;

次の文は、Employees テーブルの外部キー FK_DepartmentID_DepartmentID を再編成します。

REORGANIZE TABLE Employees 
   FOREIGN KEY FK_DepartmentID_DepartmentID;