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