说来惭愧,最近才知道 MySQL 中 order by ... limit offset,n 和不带 limit 的 order by 查询出来的排序结果是不一样的, order by ... limit offset,n 只对 前 n 条排序。
可是看完官网文档后有个疑问: limit 难道不是总在 order by 之后吗? 只对部分数据排序再分页的话,难道不会出现翻页的时候前几页的数据出现在后几页?
还是我英语不好,官网的文档理解错了?
这边是官网的文档:
https://dev.mysql.com/doc/refman/5.6/en/limit-optimization.html
1
gejun123456 2017-03-17 12:39:50 +08:00 via Android 1
他说的排序结果不一样应该指的是相同值的行的顺序可能会不一样,可以看网页最下面例子,另外 limit orderby 是不需要全部排序的,找出最小的 limit 数据即可, orderby limit 这个应该是没有问题的。
|
2
mingyun 2017-03-17 23:42:23 +08:00 1
赞同一楼,当某个排序字段有相同值的时候排序会出错,可以加上主键 id 再排序
|
3
smilejava 2017-04-16 16:12:20 +08:00
引用: 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.
|
4
smilejava 2017-04-16 16:15:18 +08:00
引用: 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 server 按任意顺序来返回这些行,和一楼说的一致。 order by + limit 先排序,再取 limit ,这个很好验证,写个 sql 就行验证结果了,可以多验证自己的疑问 |