0

以下は、インデックスを介してクエリをより適切に処理するためにテーブルの主キーを変更する必要がある場合の標準的なコーディング「パターン」だと思います。

ALTER TABLE employees   
  ADD UNIQUE INDEX tmp (employee_id, subsidiary_id);  

ALTER TABLE employees  
 DROP PRIMARY KEY;  

ALTER TABLE employees  
  ADD PRIMARY KEY (subsidiary_id, employee_id);  

私の理解では、現在の主キーを使用してクエリを容易にし、パフォーマンスを失わないようにするために、主キーを削除する前にtmpインデックスが作成されます。 しかし、私はこれを理解していません。 を実行すると(主キーを削除することを指しています)、操作が完了するまでテーブルはロックされますよね? したがって、クエリはとにかく実行できません。では、そもそもなぜ作成するのでしょうか。

ALTER TABLEALTER TABLE
tmp

4

1 に答える 1

1

このパターンは見たことがありません。しかし、私は少し異なる理由でそれを期待します。目的は、キーのペアが一連のトランザクション全体で一意であることを保証することよりも、クエリを「容易にする」ことではありません。

つまり、主キーを削除してから新しいキーを作成するまでの間に、だれかが重複するキーのペアを挿入する機会が少しあります。その後、2 番目の操作は失敗します。最初に一意のインデックスを作成することで、これが発生するのを防ぎます。

テーブルを変更するときにシステムを使用している他のユーザー/クエリがいないことがわかっている場合 (たとえば、シングル ユーザー モードである場合)、追加のインデックスを作成する必要はありません。

于 2013-08-10T20:06:34.613 に答える