oracle里面根据rowid再查询数据的过程叫做回表,有时候回表是不能避免的,那么回表的性能是什么决定的呢?下面我们来做一个实验。
1,首先创建一张表,脚本如下
这张表只有2列,X列是有序的数字,Y是随机数字转换的字符串,在表上面建立X的索引。
2.根据第一步创建的表,创建第二张表,这个表是建立Y的索引
3.在两张表上面分别运行
select /*+ index( colocated colocated_pk ) */ * from colocated where x between 20000 and 40000; select /*+ index( disorganized disorganized_pk ) */* from disorganized where x between 20000 and 40000; |
通过比较两者性能差异显著,这是为什么呢?
知道为什么了吧 ,聚合因子这2列查很多啊,知道什么决定回表的性能了吧。
注:为了确保能走索引,上面2条select用了Hints