1

以下に示すように、1 つの列がプライマリで、他の列がクラスター化インデックスを持つ SQL Server データベースにテーブルを作成することは可能ですか?

create table tablename ( id int primary key , contact int clustered index)

データの順番は?

4

2 に答える 2

1

次のように、1 つの列が PK で、他の列がクラスター化インデックスを持つテーブルを作成することができます。

CREATE TABLE TableName
(ID INT NOT NULL PRIMARY KEY,
Contact INT NOT NULL UNIQUE CLUSTERED)
GO

クラスター化インデックスが別の列で指定されているため、SQL Server は非クラスター化インデックスとして主キーを自動的に作成します。

RDBMS では、データの順序は保証されません。

于 2013-10-24T10:54:16.233 に答える
1

SQL Server では、インデックスを作成できる任意の列にクラスター化インデックスを作成できます。主キーと同じ列である必要はなく、クラスター化インデックスが一意である必要もありません。

SQL Server には、真の「データの順序」というものはありません。クラスター化インデックス内のページの論理的な順序は、各データ ページが次のページと前のページを指す二重リンク リストとして維持されます。クラスター化インデックスを作成すると、通常、これらのページはディスク上である程度 "隣接" ページになりますが、SQL Server は物理的な順序を維持しようとせず、必要に応じてページを分割し、新しいページを別の場所に割り当てます。データ ページ内の行の論理的な順序は、各ページのスロット配列によって定義されます。行は、クラスター化されたインデックスであっても、ページ内のクラスター キーの順序ではなく、割り当ての順序で格納されます。

ただし、これらのページと行の論理的な順序は、クエリ結果に表示される行の順序とは必ずしも関係ありません。したがって、あなたの質問に対する適切な答えは、クエリで ORDER BY 句を指定するときの順序は、あなたが望むものであるということです。ORDER BY を指定しない場合、その順序は未定義です。

于 2013-10-24T11:11:12.167 に答える