2017-06-29 8 views
2

私の質問は、クラスタ化されたインデックスまたはクラスタ化されていないインデックスが必要な場合です。 これは私の場合です:大量のデータを含むテーブルのベストプラクティス練習

私はテーブルを持っています。 100.000.000レコード。 デザインは、次のとおりです。 tblLarge: のCol1のVARCHAR(30)NOT NULL Col2にはVARCHAR(12)NOT NULL col3というVARCHAR(30)NOT NULL insertTime datatime

は、私が唯一の挿入(インサートの多くを行うAPPR。 1日15.000.000)。更新していないか、削除(私が今して、テーブルを切り捨てる)

ザ・のみを選択決してである: insertTimeのDESC でtblLarge Col2に=「いくつかのデータ」オーダーからのCol1を選択 - この選択が常に行われます。

Col2は一意ではありませんが、nullではありません。

質問: 1)私の状況では、どのような種類の指標をテーブルに適用するのが最適でしょうか? 原因のCol2のインデックスが必要です。クラスタ化されているか、クラスタ化されていないか? (いくつかの人は一度、テーブルには常にCLUSTEREDインデックスが必要ですが、これが正しいかどうかはわかりません)

2)NOLOCKのヒントは良いか悪いのですか? (選択は未コミットのデータを読み込む場合、私は気にしない)tblLargeからのCol1を選択 (NOLOCK)Col2に=「いくつかのデータ」オーダーinsertTimeのDESCによっては、事前

答えて

0

おかげで何のID列がありませんしたがって、クラスタード・インデックスでは、新しいレコードを挿入するときにディスク・アクティビティーが多すぎる必要があります。返すフィールドを含めるには、col2にクラスタ化されていないインデックスが必要です。col1:

CREATE NONCLUSTERED INDEX [IX_tblLarge_col2] ON [dbo].[tblLarge] 
(
    [col2] ASC 
) 
INCLUDE ( [col1]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
関連する問題