31

Sql Server には、Identity プライマリ キーを持つテーブルがあります。最新のいくつかの新しいレコードが必要になることがよくあるので、主キーの降順で並べ替えられた上位 n を取得します。主キー インデックスを降順として定義する必要がありますか?それとも違いはありませんか? つまり、それらが昇順である場合、SQL は効率的に逆方向に処理できますか?

4

2 に答える 2

43

純粋なクエリの観点からは、N 個の最新レコードまたは N 個の最も古いレコードを取得する場合、キーが降順であるか昇順であるかに違いはありません。

SQL Server の内部アルゴリズムは、キーが格納されている順序に関係なく、単一列のインデックスで両方向に等しく効率的にナビゲートできます。たとえば、単一列のインデックスに DESC を指定しても、ORDER BY IndexKeyCol DESC 句を含むクエリは、インデックスに ASC を指定した場合よりも速く実行されません。

http://msdn.microsoft.com/en-us/library/aa933132(SQL.80).aspx

ただし、ほぼすべての通常の状況では、断片化を防ぐために、主キーを昇順で通常の順序で並べる必要があります。SQL Server は、新しいレコードをデータベース ファイルの末尾に物理的に追加するように最適化されています。新しいレコードをそれぞれ先頭に挿入し、すべてを下に移動する必要がある場合、ほぼ 100% の断片化が発生する可能性があります。

于 2009-03-16T05:04:43.490 に答える
4

それはまったく違いはありません。

なぜどちらの方法でも宣言できるのか想像もつきません。

于 2009-03-16T05:00:20.913 に答える