表格扫描群集表与索引扫描之间的区别是什么

时间:2018-01-09 10:22:09

标签: sybase sybase-ase sybase-ase15

情况

我有一个只有一个索引的表,一个Clustered索引(两列)。 我执行'SELECT * FROM TABLE'并且优化器决定表扫描。

我得到的行有点按聚集索引排序。我说有点因为它看起来没有随机排序,但它有很多故障。

如果我强制使用聚簇索引SELECT * FROM TABLE(索引1 MRU),我会得到精确的聚簇表顺序。

问题

如果聚簇表中的数据按其索引排序,那么表扫描结果的顺序如何不同于聚簇索引扫描?

表扫描聚集索引是否扫描到表的叶级,是不是那些已排序?

聚集索引是否以有序方式扫描到b树的所有可能路径?

原谅我可能缺乏知识,我正在努力解决潜在的概念。

我是如何测试的

我通过测试两个不同的聚簇索引(一个有两列,另一个有一列)来实现这个不一致的排序结果。创建和删除约束并检查select语句。

截断表并创建索引后,数据被正确排序,但在删除索引并创建不同的索引之后,该数据并未使用表扫描完美排序。我需要强制使用索引。

为什么这么重要

因为我想在不使用聚簇表中的order by子句的情况下保证订单。

2 个答案:

答案 0 :(得分:1)

在15.0及更高版本上总是指定一个订单,如果你想要一个特定的订单,因为数据和索引的结构在所有页面和仅数据锁定(DOL)表之间变化。

优化程序可以选择在封面下并行执行部分查询检索,例如,根据您的并行设置,这就是订单的重要性。只是说选择*没有请求任何特定的订单。

只需添加订单,您就可以了,因为当您要求整个表格时,select *会转到tablescan,因此不需要索引提示。

答案 1 :(得分:-1)

说明

群集索引按逻辑顺序排列,但未按实际顺序排列。

这意味着表扫描是否以物理顺序完成将返回与聚集索引扫描不同的结果,聚合索引扫描按逻辑排序。

此逻辑 - 物理映射由OAM(对象分配映射)

控制