《Oracle编程艺术》第十一章-索引,验证11.2的一句话

在非唯一索引中,数据会首先按索引键值排序(依索引键的顺序),然后按rowid升序排序

而在唯一索引中,数据只按索引键值排序

 

下面验证这两句话

1.非唯一索引

 

 

pl_agentserialno为非唯一索引

从结果中可以看到,按pl_agentserialno升序排序,然后按rowid升序排序

 

2.再增加唯一索引

即非唯一索引和唯一索引并存,再次执行查询

 

查询结果与上面的无区别。

猜想可能是数据的问题,pl_agentserialno字段随机赋值。之后再执行查询

 

发现并没有按照非唯一索引键值pl_agentserialno字段排序。

是按照唯一索引键值排序的。

 

3.只保留唯一索引

再次执行查询,结果如下

按照唯一索引键值agentserialno升序排序

 

4.只保留非唯一索引

因为之前的数据值有重复的,所以随机赋值之后重新进行验证

 

会发现pl_agentserialno字段,排序完全是混乱的。并且使用order by子句得到的结果也不合人意。

之前遇到过这种问题:明显是数字,但排序结果就是混乱。使用了to_number()函数后才能根据数字内容排序。

猜测:表结构问题。此时pl_agentserialno为varchar2,应该是字符串的原因导致排序混乱。现在是按照更新时间排序的。

验证是否为按照更新时间排序的

随机更改了两个数之后,发现排序结果仍不理想。

 

现存在几个问题:

1.同时存在唯一索引和非唯一索引,如何排序

在只存在非唯一索引的情况下:

2.只有select语句,字符串如何排序

3.使用order by子句,字符串又如何排序

 

发布了57 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/shafatutu/article/details/95376057