6

レポートを作成するには、データベースを操作する必要があります。DB は非常に大きいです: 416 055 104 行 各行は非常に軽量ですが、ブール値と int id だけです。

各行は 3 つの列で識別されますが、驚いたことに、主キーはありません。一意の制約を持つクラスター化インデックスのみ。

それを知って、私は2つの質問があります。

  1. それには何か正当な理由がありますか?
  2. これを主キーに変える方法はありますか。

質問2について

新しい主キーを作成すると、関連付ける非クラスター化インデックスも作成されます (既存のクラスター化インデックスが既に存在します)。
これは私が探しているものではありません。同じインデックスを保持したいだけでなく、主キーにもします。

  • 出来ますか?
  • インデックス全体を再度作成するよりも高速でしょうか? (そうだといい)
  • どのような結果になる可能性がありますか? (ロック? クラッシュ? 破損したデータ?)
4

3 に答える 3

2

良い質問。

null許容でない列に一意のインデックスがすでにある場合は、候補キーがあります。これを「公式」主キーにすることの特別な利点を私は知りません。実際、PKにしない方が柔軟性が高いと感じています。

于 2010-08-09T13:24:28.717 に答える
2

null 非許容列に対する PRIMARY KEY 制約と UNIQUE 制約の間には、ほとんどまたはまったく違いはありません。したがって、問題の列が null 非許容の場合は、何もしないことをお勧めします。候補キーを主キーにする主な理由は、キーが PRIMARY KEY 制約で識別されることを期待するソフ​​トウェア (データ モデリング ツールやその他の開発ツールなど) がある場合です。

于 2010-08-09T18:25:31.227 に答える
1
  1. 一意のインデックスでは、NULL 値を許可できます。主キーはできません。

  2. 既存のインデックスを主キーとして「マーク」することはできないと思います。ドロップして再作成する必要があります。TABLOCKX, HOLDLOCK物を避けるために、それを行う前にテーブルに置いておくとよいでしょう。

于 2010-08-09T13:13:19.177 に答える