日時フィールドにクラスタードインデックスを持つSQL Serverテーブルがある場合は、インデックスの昇順にするか、または挿入する前にDateTime.Now(C#から)に設定します。テーブルの再編成を避けるために降順?SQL Server:日時、ASCまたはDESCのクラスタードインデックス
ありがとうございました。
日時フィールドにクラスタードインデックスを持つSQL Serverテーブルがある場合は、インデックスの昇順にするか、または挿入する前にDateTime.Now(C#から)に設定します。テーブルの再編成を避けるために降順?SQL Server:日時、ASCまたはDESCのクラスタードインデックス
ありがとうございました。
実際には関係ありませんが、DateTimeは本当にユニークであることが保証されていますか?私は、DateTimeにクラスタード・インデックスを置くことを避けます。代わりにINT IDENTITYまたはBIGINT IDENTITYを使用し、DateTimeに通常のクラスター化されていないインデックスを配置します(これは本当にユニークであることは保証されていません......)
マルク・
PS:主キーと同じように、クラスタ化されたキーがどうあるべきかについての一般的なコンセンサスがある:
を増やしますクラスタリングされていないすべてのインデックスのすべてのエントリ - できるだけ細いものを保持したい。
PS 2:非クラスタ化インデックスに検索値が見つかると、SQL Serverがすべての行を取得するため、クラスタ化キーが各非クラスタ化インデックスに追加されます。これはデータベースの行の「場所」です。したがって、ユニークで、が狭いである必要があります。
読めば、このhttp://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx
を読むには、しばしば日時フィールドに基づいて、良い選択は、日付とアイデンティティの複合キーであるた - の順(日付、アイデンティティ)で。
複合クラスターキーの最初のフィールドとしてDateTimeを実際に持たせることがどれほど役立つかを強調することはできません。最後に1時間以内にログエントリを常に照会している場合、問題は主キーの一部としてDateTimeを持つことに役立ちます。特に、DateTimeフィールドが95%未満の選択性(非ユニークな値がたくさんあることを意味します)が、インデックスをヒットし、期待するパフォーマンスを得る方法です。 – AndyClaw
クラスタ化インデックスは一意である必要がありますか? – Eyvind
もしそれが*ユニークでないならば、SQL Serverは自動的に4バイトの "ユニーク化"を追加します - もし可能であれば、それを避けてください! –
ありがとう、それを知らなかった。だから、問題のテーブルが一意の識別子であるPKを持っているなら、日時フィールドとPKにクラスタ化インデックスを作成するほうがよいでしょうか? – Eyvind