mysql select默认排序_数据库select的默认排序

Oracle数据库在无ORDER BY时返回的数据基于物理存储顺序,依赖于rowid,但该顺序不稳定。MySQL中,MyISAM表默认按物理存储顺序显示,InnoDB表按主键顺序,但这都不是可靠的排序方式。因此,建议始终在SELECT语句中明确使用ORDER BY以确保排序。在处理分页和逻辑排序时,ORDER BY是必不可少的,且应确保所有可能的排序字段都能唯一确定顺序。
摘要由CSDN通过智能技术生成

oracle对无order by的语句返回的结果不进行排序,oracle此时的处理方式是按照数据的物理存储顺序来读取数据。因为rowid是每行数据的地址,所以有时候看起来会像是使用rowid排序的。但这个顺序是可能被打乱的,在表的数据被删除后,rowid会被新插入的数据占用。所以一个无order by查询结果看起来也可能是个杂乱无章的。

Select 语句如果不加 “Order By”, MySQL会怎么排序呢?

* 不能依赖 MySQL 的默认排序

* 如果你想排序,总是加上 Order By

* GROUP BY 强加了 Order By,

对于 MyISAM 表

MySQL Select 默认排序是按照物理存储顺序显示的。(不进行额外排序).

也就是说

SELECT * FROM tbl – 会产生“表扫描”。如果表没有删除、替换、更新操作,记录会显示为插入的顺序。

InnoDB 表

同样的情况,会按主键的顺序排列。但是这是不靠谱的。潜规则。

“Select” 不加 “Order by”时, MySQL 会尝试以尽可能快的方法(MySQL 实际的方法不见得快)返回数据。

由于访问主键、索引大多数情况会快一些(在Cache里)所以返回的数据有可能以主键、索引的顺序输出,

这里并不会真的进行排序,主要是由于主键、索引本身就是排序放到内存的,所以连续输出时可能是某种序列。

在一些情况下消耗硬盘寻道时间最短的数据会先返回。

如果只查询单个表,在特殊的情况下是有规律的。

最后总结

“Order By 是要加的”

我们对于翻页等逻辑必须默认加上order by排序,而且order by的字段如果有重复值,必须指定第二排序字段,如果第二排序字段还有重复值,那必须指定更多的字段,直到所有的排序字段能够指定唯一顺序。

1

3

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-09-07 16:42

浏览 1716

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值