查看表的存储引擎:show create table xxx
从MySQL5.5.5以后,InnoDB是默认引擎myisam引擎表在没有任何的删除,修改操作下,执行 select 不带order by,那么会按照插入顺序进行排序。对于innodb引擎表来说,在相同的情况下,select 不带order by,会根据主键来排序,从小到大MySQL存储引擎之MyIsam和Innodb总结性梳理
mysql默认的排序方式
执行查询sqlSELECT * FROM test LIMIT 5,反复执行,发现结果一样,的确是按照主键,从小到大排序
继续,执行查询sqlselect id,age from test limit 5,返回的结果和第一次完全不同。
分析
-- 所有列 explain select * from test limit 5; id select_type table type possible_keys key key_len ref rows Extra -- ----------- ----- ---- ------------- ------ ------- ------ ---- ----- 1 SIMPLE test ALL (null) (null) (null) (null) 11 -- 仅id,age列 explain select id,age from test limit 5; id select_type table type possible_keys key key_len ref rows Extra -- ----------- ----- ----- ------------- --- ------- ------ ---- ----------- 1 SIMPLE test index (null) age 16 (null) 11 Using index分析结果:第一个查询语句是没有使用到任何的索引的,而第二个查询则是使用了age作为索引
结论:可以看出,mysql在不给定order by条件的时候,得到的数据结果的顺序是跟查询列有关的。因为在不同的查询列的时候,可能会使用到不同的索引条件。Mysql在使用不同索引的时候,得到的数据顺序是不一样的。这个可能就跟Mysql的索引建立机制,以及索引的使用有关了。mysql高效率随机取一条或多条数据
最优方案请参考:MySQL 中随机选择10条记录