以下に示すように、1 つの列がプライマリで、他の列がクラスター化インデックスを持つ SQL Server データベースにテーブルを作成することは可能ですか?
create table tablename ( id int primary key , contact int clustered index)
データの順番は?
以下に示すように、1 つの列がプライマリで、他の列がクラスター化インデックスを持つ SQL Server データベースにテーブルを作成することは可能ですか?
create table tablename ( id int primary key , contact int clustered index)
データの順番は?
次のように、1 つの列が PK で、他の列がクラスター化インデックスを持つテーブルを作成することができます。
CREATE TABLE TableName
(ID INT NOT NULL PRIMARY KEY,
Contact INT NOT NULL UNIQUE CLUSTERED)
GO
クラスター化インデックスが別の列で指定されているため、SQL Server は非クラスター化インデックスとして主キーを自動的に作成します。
RDBMS では、データの順序は保証されません。
SQL Server では、インデックスを作成できる任意の列にクラスター化インデックスを作成できます。主キーと同じ列である必要はなく、クラスター化インデックスが一意である必要もありません。
SQL Server には、真の「データの順序」というものはありません。クラスター化インデックス内のページの論理的な順序は、各データ ページが次のページと前のページを指す二重リンク リストとして維持されます。クラスター化インデックスを作成すると、通常、これらのページはディスク上である程度 "隣接" ページになりますが、SQL Server は物理的な順序を維持しようとせず、必要に応じてページを分割し、新しいページを別の場所に割り当てます。データ ページ内の行の論理的な順序は、各ページのスロット配列によって定義されます。行は、クラスター化されたインデックスであっても、ページ内のクラスター キーの順序ではなく、割り当ての順序で格納されます。
ただし、これらのページと行の論理的な順序は、クエリ結果に表示される行の順序とは必ずしも関係ありません。したがって、あなたの質問に対する適切な答えは、クエリで ORDER BY 句を指定するときの順序は、あなたが望むものであるということです。ORDER BY を指定しない場合、その順序は未定義です。