クラスタ化インデックスはテーブル内のデータの物理的な順序を決定することを理解しました。レコードの物理的順序をチェックするために2つの一時テーブルを作成しました。インデックス作成と実行プラン
CREATE TABLE #My_table_1
(
ID INT,
COL1 INT,
COL2 VARCHAR(20) UNIQUE,
COL3 VARCHAR(20)
);
CREATE CLUSTERED INDEX IX_Employee
ON #My_table_1 (ID, COL1 DESC)
INSERT INTO #My_table_1 VALUES (1,10,'10','10');
INSERT INTO #My_table_1 VALUES (2,520,'20','10');
INSERT INTO #My_table_1 VALUES (3,50,'30','10');
INSERT INTO #My_table_1 VALUES (5,55,'65','10');
INSERT INTO #My_table_1 VALUES (1,5,'100','10');
INSERT INTO #My_table_1 VALUES (3,300,'50','10');
INSERT INTO #My_table_1 VALUES (3,40,'5','10');
INSERT INTO #My_table_1 VALUES (1,15,'4','10');
INSERT INTO #My_table_1 VALUES (5,100,'56','10');
CREATE TABLE #My_table_2
(
ID INT,
COL1 INT,
COL2 VARCHAR(20) UNIQUE,
)
CREATE CLUSTERED INDEX IX_Employee
ON #My_table_2 (ID, COL1 DESC) --Creating a CLUSTERED INDEX on columns ID,COL1
INSERT INTO #My_table_2 VALUES (1,10,'10');
INSERT INTO #My_table_2 VALUES (2,520,'20');
INSERT INTO #My_table_2 VALUES (3,50,'30');
INSERT INTO #My_table_2 VALUES (5,55,'65');
INSERT INTO #My_table_2 VALUES (1,5,'100');
INSERT INTO #My_table_2 VALUES (3,300,'50');
INSERT INTO #My_table_2 VALUES (3,40,'5');
INSERT INTO #My_table_2 VALUES (1,15,'4');
INSERT INTO #My_table_2 VALUES (5,100,'56');
私は両方のテーブルをクエリとして、私はレコードの順序が両方のテーブルで異なることがわかりました。それはなぜそうですか? Selection_Order 私は実行計画を確認しました。クエリの実行計画が異なるからです。 誰も説明することができます、なぜそれが起こっている?クラスタ化インデックスについての私の理解が間違っているかどうか?
注文をどのように決定しましたか? selectはあなたに注文を与えないので、SQL Serverが適切であると見なして結果を注文します。あなたが注文をしたい場合は、order by節を追加してください。 – TomTom