MyISAM以及InnoDB引擎默认排序方式

当MySQL的SQL语句未指定排序方式时,其排序行为取决于存储引擎。MyISAM在无更新操作时按输入顺序升序排列,更新后则无序;InnoDB则按照主键排序。编写SQL时要注意存储引擎的影响,因为不同引擎的查询结果可能不同。这主要由存储结构决定,如InnoDB的聚簇索引和MyISAM的堆表结构。
摘要由CSDN通过智能技术生成

今天在review代码查看SQL语句时突然对没有指定排序方式的SQL语句返回怎样的排序结构感兴趣!在某些场景中返回结果中的元素到底是按照什么顺序以什么字段排序的将直接影响到整个业务是否正确。例如myBatis中语句如下:

<select id="get_by_id" resultMap="App"  parameterClass="java.lang.Long">  
select <include refid="fileds"/> from table_a where id = #id# and type = 2 and state != 0  
</select>  

排查问题

那么到底MySQL在没有指定排序字段以及排序顺序时是按照什么规则排序呢?最早猜测是按照主键排序,即在table_a表中按照id字段进行降序排列。那么到底是否正确呢?为了验证猜测,在本地通过Navicat8对这个猜测进行了验证:SELECT * FROM test_a查询结果:


发现查询结果并没有按照猜测的方式进行排序,并且查询结果没有任何规律可循。这样看来如果按照上述的方式处理业务是很有可能出现问题的。仔细想了一下,这个问题应该和数据库存储引擎有关系,然后再网上查阅了一下这个问题,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值