在非唯一索引中,数据会首先按索引键值排序(依索引键的顺序),然后按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子句,字符串又如何排序