oracle 中索引问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 中索引问题相关的知识,希望对你有一定的参考价值。
在Oracle的table里建了两个列的索引:Normal 索引 和Unique 唯一索引,那我向这两个列同时塞资料的时候,假若不加Order By语句的话,会默认以哪个索引排序?
参考技术A 索引就像书的目录,是方便你查资料时快速定位。你insert时,不知道会存放在那个物理位置,与排序无关。order by及index都是select时有用。insert是用不到的。追问我现在就是有个表,其中两个栏位创建了索引:normal索引和Unique索引,分别是ASN_LOT和ASN_ID,当我同时向这个表插入几行资料的时候,资料到了表中会自动按ASN_LOT排序,不会按ASN_ID排序
追答oracle存放的物理位置没有排序一说,每行数据有个rowid,这个你可以看成是物理位置。你说的排序是不是默认查询时不加order by查出来的结果可能用到了rowid默认的一个顺序。
你在插入时用order by?你是不是inser *** select *** from ** order by **
这可能是你在select时排序了,然后在插入数据时,rowid按照你select的排序有个顺序。
我有个栏位好奇怪,我同时塞了三行资料,分别是
jessy
mini
hou
到了表里会自动重排成
jessy
hou
mini
貌似是按字母顺序进行了重排,为什么会这样?
好吧,我觉得我回答错问题了。
我应该给你解释下oracle体系结构,这个太复杂,举个简单的例子。
地球是一个表,里面有三行数据按地理位置存放中国、美国、日本。你说这三行数据是如何排序的?他们根本就没有顺序!而你看到的结果是一个二维表,按照中国、美国、日本的顺序显示。你如果按照国土面积排序就显示美国、中国、日本,按照人均GDP排序就是美国、日本、中国,按照人口总数排序就是中国、美国、日本。
他们三个本身存放的地理位置是没有顺序的,只是在显示结果上有一个顺序,而这个顺序是按照你的要求来排序的,就是order by,如果你不加order by,他就是按照rowid进行排序。
我其实不是查询表中的数据,而是我要向表中插资料,但是资料进了表里面就不是当初我插的顺序了,懂?
参考技术B 插入的时候不会按照索引排序,但是插入的时候会写入索引信息。数据的存储一般来说都是连续的往数据块里面写,根据插入的先后顺序进行。不会按照索引顺序来的。
可以通过ROWID信息来分析写入的位置。本回答被提问者和网友采纳 参考技术C 在插入时不会进行排序的。 参考技术D 应该是主键吧
以上是关于oracle 中索引问题的主要内容,如果未能解决你的问题,请参考以下文章