SQL Server : clustered and nonclustered indexing
本问题已经有最佳答案,请猛点这里访问。
我想知道
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CREATE TABLE test_table (ID tinyint) GO INSERT INTO test_table VALUES (2), (1), (3) --CREATE UNIQUE CLUSTERED INDEX Clustered_Index CREATE INDEX Nonclustered_Index ON test_table (ID); GO SELECT * FROM test_table; GO DROP TABLE test_table; GO |
我要做什么来解决这个差异?
我知道你想展示什么,但我不知道为什么。我认为这可能是演示不起作用的原因。
聚集索引决定记录在磁盘上的存储顺序。但是,它并不保证任何给定的查询每次都会以该确切顺序返回记录。巧合的是,它们可能会按该顺序返回(例如,如果您在创建表的过程中指定了索引之后按该顺序插入它们,在大多数情况下都会发生这种情况),但这并不能保证。
在表上创建非聚集索引时,它是指向聚集索引的指针(如果存在)。但是,如果没有,那么表中的数据将按非聚集索引排序。我能想到的唯一方法是在表上有两个索引,并通过让它们都不集群来显示查询顺序,然后使一个集群,然后使另一个集群(注意,您只能有一个集群索引):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | CREATE TABLE test_table (ID tinyint, ID2 tinyint); GO ---CREATE NONCLUSTERED INDEX non_clustered_Indexa CREATE INDEX non_clustered_Indexa ON test_table (ID); --CREATE NONCLUSTERED INDEX non_clustered_Indexb CREATE INDEX non_clustered_Indexb ON test_table (ID2); INSERT INTO test_table VALUES (2, 1); INSERT INTO test_table VALUES (1, 2); INSERT INTO test_table VALUES (3, 3); GO SELECT * FROM test_table; GO |