SQL语句的查询结果的顺序是由哪些因素决定

2014-11-24 08:36:24 ? 作者: ? 浏览: 2
以mysql为例 select * from data ;
output:
raw1
raw2
....
rawn

是什么因素决定了这顺序?(插入时间,物理存储?)



1.我想和oracle差不多,按数据块(索引块)内记录的物理顺序. 不保证一定按照插入记录的顺序.
2. 诸位同学说的按照插入顺序,没有证据证明此点. 也难以保证;
比如一个myisam表,全表扫描返回记录,那么是按照物理的顺序的,如果使用索引查找,是索引顺序和物理存储顺序的结合,如果仅仅读取index(比如覆盖索引),就是index的顺序,
还有,innodb的记录插入,实质上是一个索引组织表,主键不太可能都是顺序插入的,如何保证按照插入顺序读取出结果呢
3.总之,这个顺序不好确定,也不应该决定于什么因素,不同的 数据库实现不同.只能用order by 来限定.

影响因素会随着环境的差异而不一样。
总的来说,会与以下因素有关:
索引方式
物理位置
存储引擎

当然,可能还会有一些其他的细节

1.分存储引擎,典型的:MyISAM还是InnoDB

2.数据肯定根据主键或类似主键作用的索引来读取的,若是没有主键,那么是根据全表扫描读取的,也可能根据隐含的主键

3.索引存储的结构,比如B-tree,还是B+索引

4.其次才是数据插入的顺序,比如对于InnoDB,就会调整记录的顺序,而不一定按插入顺序而定的...

若是LZ的SQL有附加的 筛选条件 或者 排序条件,那就该另议论了。

不同的引擎有不同的结果,一般来说是按找插入的顺序,这样也利于用户理解,我们开发的引擎的这个顺序就经历过几次变化,开始的时候按倒序,后来为了适应数据结构,变成了部分随机,最后确定是按照插入顺序,一般来说不应依赖于这个顺序,如果一定要有顺序,请使用order by,当然,order by的列上最好建上索引。
-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: