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

 以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的列上最好建上索引。

你可能感兴趣的:(sql,数据库,职场,休闲)