我在这里的原始陈述是错误
的
,因为任何索引都不会影响表中的数据。聚集索引只是指向表中数据的另一种类型的索引。它不会更改顺序或对数据执行任何其他操作。
您始终可以在创建(聚集或非聚集)索引之前和之后直接从具有行号的表中获取数据。
原始声明结束
需要更正(我不经常使用 MSSQL,所以以前从未有机会对此进行测试)
似乎 MSSQL 将聚集索引实现为根本不是真正的索引,但可能更接近触发器/约束对。
从我现在的粗略测试来看:
1)
CREATE TABLE testTable ...
INSERT ... (few rows)
SELECT * FROM testTable
这显示了插入顺序中的所有结果
2)
CREATE CLUSTERED INDEX ... ON testTable (...);
INSERT ... (few rows)
SELECT * FROM testTable
CLUSTERED INDEX
这显示了按3)中的字段排序的所有结果
DROP INDEX (CLUSTERED INDEX Name) ON testTable;
INSERT ... (few rows)
SELECT * FROM testTable
这以相同的顺序显示了步骤 2) [之前DROP INDEX
]的所有结果,并再次以插入顺序显示了稍后 [在步骤 3)] 中插入的行。
对我来说,这意味着 MSSQL确实重新排序了实际的数据记录(很可能在插入/删除时付出了巨大的代价)。
所以,我站着纠正和指责。老实说,我从没想过会出现这种情况(聚集索引行为,而不是我被证明是错误的)。