使用mySql order by 字段
如果该字段存在多个同一值。
譬如:
id | name | create_time |
---|---|---|
1 | 红 | 20200513 |
2 | 白 | 20200513 |
3 | 蓝 | 20200513 |
select * from tb_name order by create_time
你多运行几次,会发现,出现的数据顺序不是固定的,可能会出现红白蓝,白蓝红,蓝红白……
特别提醒:
order by 多个字段,多个字段组合的值相同时候,也会出现这种情况.
mysql会对order by 字段数据相同的数据进行随机排序,所以同一条SQL查出的结果会出现排序不同的情况。
出现原因:
mysql的官方解释为:
If multiple rows have identical values in the ORDER BY columns, the server is free to return those rows in any order, and may do so differently depending on the overall execution plan. In other words, the sort order of those rows is nondeterministic with respect to the nonordered columns.
通俗点说就是,当出现多行相同值时,mysql会以随机的顺序返回查询结果,并且依据具体的执⾏计划会有不同。
解决建议:
综合表的数据结构进行改进。
譬如:
1.我的数据表,id是自增型(或者表里有其他id),那么我order by时候把唯一值的字段加上,就可以解决
2.依旧想只使用create_time,不想加入字段,那么应该考虑把时间准确到毫秒,在正常情况下,这个create_time不会重复。
3.你可以把order by这个字段直接建立索引,理论上来说,只要建立了索引,数据储存时候,它的位置顺序就会一定(我没有验证过,但应该可以)