日期:2014-05-17  浏览次数:20927 次

select * from table按照什么排序啊
select * from table按照什么排序啊 默认order by什么 我看了下项目中的DB 也不是按主键来排的呀。
是不是和什么表关联有关系?

新手求解释。。。。。

------解决方案--------------------
select * from table
--------------------
默认是不排序的。是Oracle根据数据文件记录顺序读取。加快效率
------解决方案--------------------
探讨
select * from table按照什么排序啊 默认order by什么 我看了下项目中的DB 也不是按主键来排的呀。
是不是和什么表关联有关系?

------解决方案--------------------
探讨
引用:

默认没有排序,意味着多次搜索出来的顺序可能是不一样的,要排序一定要指定order by.

这个很关键啊 是不是每次select * from 搜索的结果顺序都不一样呢?
要是这样的话就是oracle内部的操作了

现在的问题就成了结果不一样 那select * from就没有特定的规则
结果一样select * from就有特定的规则,这规则是什么?

------解决方案--------------------
主要是根据数据的存储位置排序:
1、对于非分区表、无索引、无并行的情况下oracle默认是按照extent_id和rowid来联合排序,即order by extent_id,rowid
2、对于分区表、无索引、无并行的情况下oracle默认是按照partition_position、extent_id和rowid来联合排序,即order by partition_position,extent_id,rowid

 

------解决方案--------------------
何必研究这个呢,关系性数据库本身的概念就在于数据记录本身是无序的,既然你不写order by,那就是不要求这个顺序。我在实践中的结果就是,每次查询得到的记录顺序是不一样的,有时候看起来是插入顺序,但数据多了就发现不是这样的。
------解决方案--------------------
原来是这样
------解决方案--------------------
探讨

何必研究这个呢,关系性数据库本身的概念就在于数据记录本身是无序的,既然你不写order by,那就是不要求这个顺序。我在实践中的结果就是,每次查询得到的记录顺序是不一样的,有时候看起来是插入顺序,但数据多了就发现不是这样的。