您好,匿名用户
随意问技术百科期待您的加入

mysql的MYISAM引擎中有没有sequence id,为什么没有指定order by的时候顺序会打乱

0 投票

我想到这个问题是从观察mysql的自然排序状态引发的,我们用的很多mysql管理软件,在列出表数据时一般都用的以下代码

SELECT * FROM table_name LIMIT x OFFSET y

这个时候没有指定任何排序字段,那么在mysql内部就应该有一个类似oracle或者pgsql里面sequence id的东西,做为它的默认索引来实现排序之类的东西。但我从来没看到有人提过mysql有这个玩意。

另一个佐证是如果你指定了一个自增id作为主键,在我们预想中如果执行上面的语句,主键的排序顺序应该一致,实际上并不是这样,虽然大部分是一致的,但是有少部分会打乱。因此他一定有一个内部的排序机制,这个机制是什么?

用户头像 提问 2012年 12月1日 @ Taurus 上等兵 (303 威望)
分享到:

1个回答

0 投票
 
最佳答案

单说MyISAM吧。 MyISAM的数据和索引是分开的,当你执行一个简单的select *的时候,按照的就是数据在磁盘上的排列顺序(你可以把这个顺序理解为sequenceid)。 但是必须指出的是,数据空间是会复用的,也就是说当你在插入一行数据的时候,如果前面被删除的区块有合适空位,就会放到这空位中。 因此select *并不保证是按照插入顺序。 不知道这么说有木有清楚。。。

用户头像 回复 2012年 12月1日 @ Ashe 上等兵 (336 威望)
选中 2012年 12月1日 @Taurus
提一个问题:

相关问题

0 投票
0 回复 13 阅读
用户头像 提问 2013年 11月15日 @ Lucian 列兵 (86 威望)
0 投票
1 回复 69 阅读
0 投票
1 回复 36 阅读
用户头像 提问 2012年 12月1日 @ Graves 上等兵 (254 威望)
0 投票
1 回复 138 阅读
0 投票
1 回复 34 阅读
用户头像 提问 2012年 12月1日 @ Teemo 上等兵 (318 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...