2017-03-23 3 views
1

これはちょっと混乱しています。 ORDER BYが指定されていない場合、SELECTはソートのためにClustered Indexにデフォルトで設定されるべきであるという印象を受けました。ORDERなしのSELECTクラスタ化されたインデックスでの並べ替え

ただし、以下を実行すると、代わりにNON-Clusteredインデックスが使用されます。

それは以下になり
DROP TABLE TEST_TABLE 
if NOT EXISTS(select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'TEST_TABLE') 
BEGIN 
    CREATE TABLE TEST_TABLE (
     [ID] int  NOT NULL IDENTITY(1,1), 
     [col1] int  NOT NULL, 
     [col2] int  NOT NULL 

     CONSTRAINT [PK_TEST_TABLE] PRIMARY KEY CLUSTERED 
    (
     [ID] ASC 
    )WITH (FILLFACTOR = 90) ON [PRIMARY] 
    ) ON [PRIMARY] 
END 

IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[TEST_TABLE]') AND name = N'TEST_TABLE_cols') 
    DROP INDEX [TEST_TABLE_cols] ON [dbo].[TEST_TABLE] 

CREATE UNIQUE NONCLUSTERED INDEX [TEST_TABLE_cols] ON [dbo].[TEST_TABLE] 
(  [col1] ASC, 
     [col2] ASC  
)WITH (FILLFACTOR = 60) ON [PRIMARY]; 
GO 
--GO 

EXEC ('insert into test_table select 1, 0') 
EXEC ('insert into test_table select 2, 0') 
EXEC ('insert into test_table select 10, 0') 
EXEC ('insert into test_table select 9, 0') 
EXEC ('insert into test_table select 8, 0') 
EXEC ('insert into test_table select 6, 0') 
EXEC ('insert into test_table select 7, 0') 
EXEC ('insert into test_table select 5, 0') 
EXEC ('insert into test_table select 3, 0') 
EXEC ('insert into test_table select 4, 0') 

select * from test_table 

...

ID   col1  col2 
----------- ----------- ----------- 
1   1   0 
2   2   0 
9   3   0 
10   4   0 
8   5   0 
6   6   0 
7   7   0 
5   8   0 
4   9   0 
3   10   0 

誰かが説明できる場合は、それが最もいただければ幸いです!

+3

ありません 'ORDER BY'注文保証はありません。それは簡単です。 –

+3

さて、そのことは次のとおりです。「ORDER BYが指定されていない場合、SELECTはソート用のClustered Indexにデフォルト設定する必要があります」という印象を受けました。 'ORDER BY'がなければ、オプティマイザは、 – Lamak

+0

という注文のインデックスを選択できます。それは私の誤解でした。迅速なフィードバックをありがとう。 – stubs

答えて

5

ORDER BYが指定されていない場合、SELECTは並べ替えのためにClustered Indexにデフォルト設定する必要があります。

実際には、実際には(行が単純にストレージから順に読み込まれると、それが取得された場合)、そのような保証はありません。クエリーまたはクエリープランのわずかな変更は、簡単に変更する可能性があります。

注文を指定しない場合、結果の順序はありません。

2

私はあなたがこれを見ている理由を説明することはできませんが、ORDER BY句は、以下のリンクごとに指定されていない限り、私は何の順序が保証されていないことを知っていますか:

https://msdn.microsoft.com/en-us/library/ms188385.aspx

関連する問題