躺着读书 说:
呵呵,oracle就是这个规矩。习惯就好。
他有一个原则。这些不加说明的叫做默认行为,而默认行为是可以改动的。
比如说:oracle10g返回的结果是默认排序的,于是你不加order by写了大量的代码。但是有一天数据库升级到了10g release1 你就发现你的程序完全不能运行,错误莫名奇妙。
哦,原来是oracle改掉了这个默认行为,默认不排序了。
只是举例。实际上oracle目前为止都不会自动按主键排序。但是自动排序的sql server 或者mysql 有一天改动了这个默认行为。你是不是要全部重写你的sql呢?
oracle文档化的东西它就不会改动,并且会一直支持。而不是oracle文档化的东西,随时都可能被改掉。说不定一个升级包就改掉了。
不过不按主键自动排序是有性能方面的原因。原因就是,排序是有性能开销的。你可以查看一下不写order by和写了order by语句的执行计划,加了order by 肯定会增加很多的IO和cpu的开销。而你没有必要排序的时候排序了,是不是在浪费性能呢?呵呵。
这就是oracle的另外一个原则:凡是影响数据库速度而不一定会带来好处的东西,oracle一概默认不支持。