Mysql的ORDER BY 和Limit offset的一个问题,拿出来和大家研究下

今天碰到个很怪异的问题,如题关于mysql的ORDER BY 语句和Limit offset语句问题。

bug再现下:select *

from A a

where a.culomn1

limit 5 offset 0

order by a.culomn1 asc

则出现sqlException,提示order by 这行有问题。

若将语句改为如下,将limit语句和order by 语句调换:

select *

from A a

where a.culomn1

order by a.culomn1 asc

limit 5 offset 0

则会正常执行,本人对sql知之甚少,所以拿出来学习学习,还望大家不吝赐教。

Mysql的ORDER BY 和Limit offset的一个问题,拿出来和大家研究下

时间: 2024-10-30 00:38:17

Mysql的ORDER BY 和Limit offset的一个问题,拿出来和大家研究下的相关文章

mysql同时使用order by和limit查询时的一个严重隐患 -- 丢失数据

我经常使用order by和limit来做数据分页显示并排序,一直也没发现过什么问题.但这两天缺遇到一个严重的问题,在按时间戳升序排列并用limit分批读取数据时,却发现在某些记录丢失了,表中明明有的记录确死活读取不到.研究了大半天终于发现了问题所在,记录一下以防忘记,也是给大家提个醒. 问题重现 工具和原料 数据库: Ver 14.14 Distrib 5.6.11, for Linux (x86_64) using EditLine wrapper 表结构: 字段 类型 说明 id int(

mysql取出指定范围数据limit offset分析与运用

传统写法 limit 偏移量,取出条数 SELECT * FROM yundou_management.service_order where order_status=1 order by id asc limit 108,8 ; mysql5之后支持新写法,让人更容易理解 limit 取出条数 offset 偏移量 SELECT * FROM yundou_management.service_order where order_status=1 order by id asc limit

MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?

本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案,因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的场景的,同时,面对能够达到优化的方式要追究其原因,同样的做法,换了个场景,达不到优化效果的,还要追究其原因.个人对此场景在不用情况表示怀疑,然后自己测试了一把,果然发现一些问题,同时也证实了一些预期的想法.

Mysql order by与limit混用陷阱

在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N.但是这种写法却隐藏着较深的使用陷阱.在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致的问题. 比如现在有一张user表,表结构及数据如下: 表结构 表数据 现在想根据创建时间升序查询user表,并且分页查询,每页2条,那很容易写出sql为:select * from user orde

MYSQL limit,offset 区别

Sql代码   SELECT keyword FROM keyword_rank WHERE advertiserid='59' order by keyword LIMIT 2 OFFSET 1; 比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取 Sql代码   SELECT keyword FROM keyword_rank WHERE advertiserid='59' ORDER BY keyword LIMIT 2 ,1; 而这个SQL,limit后面

MySQL 学习笔记 (limit offset)

select * from table limit (10000,10);这样是很慢的,因为要定位 比较快的写法是 select * from table where id >=(select * from table limit (10000,1) ) limit 10;不要问题为什么! 因为目前也用不到.最直接的方法还是建议把数据弄小,不然就设计一些算法来计算第几应该有哪些资料,直接定位获取 . MySQL 学习笔记 (limit offset)

mysql分页 limit,limit offset

limit: SELECT keyword FROM keyword_rank WHERE advertiserid='59' ORDER BY keyword LIMIT 2 ,1; limit后面是从第2条开始读,读取1条信息: SELECT keyword FROM keyword_rank WHERE advertiserid='59' order by keyword LIMIT 2 OFFSET 1; limit后面跟的是2条数据,offset后面是从第1条开始读取 原文地址:htt

mysql的sql分页函数limit使用

My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为: SELECT * FROM 表名称 LIMIT M,N 其中limit为可选项,例如我们有个student表,我们选取前5条记录可以使用下面的sql语句 select * from student limit 5; 例如从表student(主键为id)中从第10条记录(不包括第10跳记录)开始检索20条记录,语句如下: select * from s

索引优化来实现MySQL的ORDER BY语句优化

MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度. MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作. 通过索引优化来实现MySQL的ORDER BY语句优化: 1.ORDER BY的索引优化.如果一个SQL语句形如: SELECT [column1],[column2],-. FROM [TABLE] ORDER BY [sort]; 在[sort]这个栏位上建立索引就可以实现利用索引进行order