情况
我有一个只有一个索引的表,一个聚集索引(两列)。我做了一个'SELECT * FROM TABLE',优化器决定一个表扫描。
我得到的行有点按聚集索引排序。我这么说是因为它看起来不是随机排序的,但它有很多小故障。
如果我强制使用聚集索引 SELECT * FROM TABLE (index 1 MRU),我会得到准确的聚集表顺序。
问题
如果聚集表中的数据按其索引排序,那么表扫描结果与聚集索引扫描的顺序有何不同?
聚集索引中的表扫描是对表的叶级别的扫描,不是排序的吗?
聚集索引扫描是否以有序的方式扫描到 b 树的所有可能路径?
请原谅我可能缺乏知识,我正在尽力理解基本概念。
我是如何测试的
我通过测试两个不同的聚集索引(一个包含两列,另一个包含一列)来实现这种不一致的排序结果。创建和删除约束并检查 select 语句。
在截断表并创建索引后,数据已正确排序,但在删除索引并创建另一个索引后,该数据未通过表扫描完美排序。我需要强制使用索引。
为什么这很重要
因为我想在不使用聚簇表中的 order by 子句的情况下保证订单。