SQLServerで一意性を強制するために開発者がどの手法を使用することを好むかを知りたいです。UNIQUECONSTRAINTまたはUNIQUEINDEXです。それぞれの物理的な実装にほとんど違いがないことを考えると、どちらが最適かをどのように判断しますか?
パフォーマンス以外に、最良のソリューションを評価する理由はありますか?
どちらか一方にデータベース管理の利点はありますか?
SQLServerで一意性を強制するために開発者がどの手法を使用することを好むかを知りたいです。UNIQUECONSTRAINTまたはUNIQUEINDEXです。それぞれの物理的な実装にほとんど違いがないことを考えると、どちらが最適かをどのように判断しますか?
パフォーマンス以外に、最良のソリューションを評価する理由はありますか?
どちらか一方にデータベース管理の利点はありますか?
この 2 つを比較した MSDN の記事は、SQL Server 2000 に関するものです: http://msdn.microsoft.com/en-us/library/aa224827(SQL.80).aspx
ほとんどの場合、違いはありません。制約は、カバーの下のインデックスとして実装されます。制約を無効にする機能はありますが、実際には SQL Server では機能しません。
一意の制約を実装する方法について、FILLFACTOR などを微調整したい場合にのみ重要です。
INCLUDE
より効率的なカバリング インデックスを提供するために、SQL Server 2008+ が追加されました。フィルターされたインデックス = 行のサブセットに対する一意の制約/複数の null を無視するなど。
それらに大きな違いはありません。 一意の制約を作成すると、SQL Server によって一意のインデックスが自動的に作成されます。
インデックスを作成するための構文を使用すると、一意のインデックスを定義して、クラスター化/非クラスター化、含まれる列、ファイル グループ、インデックス フィルタリング (SqlSvr2008) などを指定することをより適切に制御できます。
ほとんどの場合、制約は一意性の意図を表しているため、望ましいものです。それは制約です。インデックスはこの意図を伝えません。
管理性に関しては、影響は最小限です。制約から独立して作成されたかのように、インデックスを管理 (再構築、再編成) できます。唯一の違いは、制約がインデックスに依存することです。そのため、インデックスを削除するには、制約も削除する必要があります。