【发布时间】:2018-06-18 08:37:39
【问题描述】:
情况
我有一个只有一个索引的表,一个聚集索引(两列)。 我执行“SELECT * FROM TABLE”,优化器决定进行表扫描。
我得到的行有点按聚集索引排序。我这么说是因为它看起来不是随机排序的,但它有很多小故障。
如果我强制使用聚集索引 SELECT * FROM TABLE (index 1 MRU),我会得到准确的聚集表顺序。
问题
如果聚簇表中的数据按其索引排序,那么表扫描结果的顺序与聚簇索引扫描有何不同?
聚集索引中的表扫描是对表的叶级别的扫描吗?不是排序的吗?
聚集索引扫描是对b-tree所有可能路径的有序扫描吗?
请原谅我可能缺乏知识,我正在尽力理解基本概念。
我是如何测试的
我通过测试两个不同的聚集索引(一个包含两列,另一个包含一列)来获得这种不一致的排序结果。创建和删除约束并检查 select 语句。
在截断表并创建索引后,数据已正确排序,但在删除索引并创建另一个索引后,该数据未通过表扫描完美排序。我需要强制使用索引。
为什么这很重要
因为我想在聚簇表中不使用 order by 子句来保证订单。
【问题讨论】:
标签: sybase sap-ase sybase-ase15