2016-10-12 14 views
1

私は数百万のレコードを持つトランザクションテーブル(単一の主キー)を持っており、毎日100個のレコードが追加されています。クラスタ化インデックス、order by節なし

さらに、このテーブルは、新しく挿入されたレコードに対してのみ、順序なしで行われるリコンシリエーションと決済に使用されます。

IDカラムにクラスタード・インデックスを作成しましたが、ASCかDESCかどうかはわかりません。ほとんどの処理は新しく挿入されたレコードで行われるので、私はそのインデックスをDESCとして注文することを考えていましたが、それは確実ではありません。

これについてStackOverflowに関するいくつかのブログと質問をチェックしましたが、それらのすべてがorder by節と複合クラスターインデックスについて議論しています。私の場合は、単一列のクラスタード・インデックスがあり、順序の要件はありません。

+0

SQL Serverは、効率の良い最初または最後のページからインデックスをトラバースできます。 –

+0

コメントを共有してくれてありがとう@RogerWolfいくつかのリンクや詳細を教えてください。 –

+1

私はあなたが 'dboからトップ(1000)*を選択するようなクエリでこれらの"新しく追加された "レコードを拾うとは思わない。そうすれば、並列処理や一般的な効率性を忘れることができます。代わりに、トランザクションが現在どのワークフロー段階にあるかを示すフィールドを表示します。そして、あなたはそのフィールドにインデックスを必要とし、私を信頼してください。この場合、クラスタード・インデックスの順序は関係ありません。 –

答えて

0

これは依存します... ORDER BYのようないくつかの操作では、インデックスは双方向であるため、ソートは必要ありません。

他の操作(ランキング、インデックススキャンなど)では重要です。 SQLエンジンは、並列性を備えたフォワードインデックススキャンを実行するように設計されていますが、クエリオプティマイザが逆インデックススキャンを必要とする場合、そのような操作はシングルスレッドです。したがって、誤ったソート順を選択すると、パフォーマンスに影響を与える可能性があります。

これは実際にデータベースのデータとクエリに依存するので、(テーブルに対して)最も頻繁なユーザークエリを取得し、2つの異なるソート順の実行計画とIO統計を確認することをお勧めします。

また、データがインデックスのソート順と同じ順序で追加されないと、インデックスの断片化が発生する可能性があります。

関連する問題