2009-06-19 14 views
1

私は、ブラウンフィールドのSQL Server 2005データベースを使用して、主キー値の大部分として、およびクラスタードインデックス(パフォーマンスには悪い)として、標準のソートされていないGUIDを使用しています。すべての非シーケンシャルGUIDをシーケンシャルGUIDで置き換えるにはどうすればいいですか?

これらを順次GUIDに変更するにはどうすればよいですか?課題の1つは、プライマリキーをそれぞれ変更する際に、すべての外部キー値を置き換えることです。

このタイプの変換を実行するツールやスクリプトはありますか?

答えて

5

はあなただけなので、2列で新しいテーブルを作成し、デフォルト

としてnewsequentialid()関数を使用することができることを覚えておいてください。オリジナルのテーブルのキーをこのテーブルに挿入します(他のカラムはそのままにしておきます)

元のテーブルに戻ってPKをnewsequantialidで更新します。カスケード更新がある場合は、

+0

+1 - 私は過去に同様のアプローチを使用しましたが、自分で外部キーを更新しました。 –

0

パフォーマンスが悪いことをどのように知っていますか?

GUIDの利点は、複数のプロセスが同時にレコードを作成することを心配する必要がないことです。プログラムに応じて、コードを大幅に簡略化することができます。

+1

挿入が遅いです。ページの断片化は高いです。連続したIDを持つデータベースが重複していた場合は、どれくらい遅いかを教えてください:) –

+1

newsequentialid()がGUIDを作成していない間にnewid()が悪いので、ページ分割が多くなるので悪いです – SQLMenace

+0

このポッドキャストの最後に:http://www.dotnetrocks.com/default.aspx?showNum=455 –

0

SequentialGuidsは、GuidがPKである場合のパフォーマンスに最適です。これが彼らの存在の背後にある理由です。

+1

実際の質問には答えません。 –

関連する問題