今天在mysql上处理一个数据量达到千万级的数据库表时,要取出满足条件的数据集,然后存入到mongo数据库,使用JPA提供的Pageble去拿分页,再用多线程去取数据时,发现刚开始效率还可以,肯定比单线程强很多,但是这个Pageable有一个问题,在生成sql语句时,会自动加上一个limit *,10000,这样的限制条件,“*”代表从哪一行开始取数据,10000代表本次操作取10000条数据。这种操作会严重占用服务器的缓存,如果你在执行这种操作,别人也在访问时,会导致大家一起都卡得一比。

  解决方法就是用一个并发队列来存储每一页的最后一条数据的id,但是我遇到了一个问题:

      This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery

  limit不能和IN这样的只是范围的关键字直接连用,错误的sql和改进后的sql。

//出错的sql
select max(id) from news_info where id in (select id from news_info where where pub_date>?1 and id>?2 order by id limit 10000) //正确的sql
select max(id) from news_info where id in (select id from (select id from news_info where pub_date>?1 and id>?2 order by id limit 10000) as news)

  既然不能直接连用,那就再中间创建一个临时表咯。

MySQL in和limit不能连用的问题的更多相关文章

  1. mysql 存储过程中limit

    1.mysql的高版本(5.5),存储过程中的limit可以使用变量,如下:select * from student limit iStart,iNum; 2.mysql的低版本(5.1),存储过程 ...

  2. Mysql 分页语句Limit用法

    转载自:http://qimo601.iteye.com/blog/1634748 1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用 ...

  3. 【转】Mysql分页语句Limit用法

    http://qimo601.iteye.com/blog/1634748 FAQ: MYSQL limit,offset 区别 SELECT keyword FROM `keyword_rank` ...

  4. mysql中的limit

    mysql中常使用limit做分页查询,使用方法也很简单: SELECT * FROM table LIMIT [offset,] rows #注: offset-偏移量,rows查询返回的行数 -- ...

  5. mysql进阶(七)limit的用法

    limit是mysql的语法 select * from table limit m,n 其中m是指记录开始的index,从0开始,表示第一条记录 n是指从第m+1条开始,取n条. select *  ...

  6. MYSQL查询优化:Limit

    Limit语法: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT子句可以被用于强制 SELECT 语句返回指定的 ...

  7. MySql存储过程中limit传参

    最近做项目用到了MySQL数据库,感觉还是蛮好用的,但是有同事前几天写存储过程的时候老调不通,我看了看后发现把limit语句后面带的参数随便改成一个数字就调试通过了,不知道是MySql当初就这么设计的 ...

  8. Mysql分页之limit用法与limit优化

    Mysql limit分页语句用法 与Oracle和MS SqlServer相比,mysql的分页方法简单的让人想哭. --语法: SELECT * FROM table LIMIT [offset, ...

  9. mysql分页的limit优化

    1.很多新人都会很纳闷,为什么我建了索引使用分页还是这么卡.好,现在让我们一步一步去找原因吧. 首先limit本身跟索引没有直接关系. 先建一张商品sku表 create table goods_sk ...

随机推荐

  1. iterm 2快捷键

    快捷键 作用说明 command + f 搜索&查找,如果输入搜索内容后,按下 tab 键,就会 iTerm 自动帮选中搜索关键词,并且自动的帮我们复制到了剪贴板中.如果输入的是 shift+ ...

  2. RTSP协议概况

    RTSP协议概况 简单的交互命令就能实现RTSP对接,C代表Client S代表Server 例如:C1-客户端发的第一个命令 S1-服务器响应的第一个回复 [C1]OPTIONS rtsp://10 ...

  3. 【Python】【demo实验14】【练习实例】【斐波那契数列】【经典兔子生小兔子问题】

    古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 每个月的兔子数量 1:22:23:4 2+24:6 2+ ...

  4. 微信小程序开放数据解密 AES-128-CBC 解密(C#版本)

    最近在开发小程序,需要跟微信服务端交互,微信敏感数据都有加密返回,需要在服务端接收进行解密后再返回给客户端小程序,今天就通过C# 进行数据的解密,官方下载下来是Node.C++.php等,就是没有C# ...

  5. mount.nfs: access denied by server while mounting

    在利用centos7系统搭建NFS服务时出现如下问题,百度后才解决 因为当时在服务器端vim /etc/exports 时, 我只写了 这一行 /home/wjs-nfs  *(ro) (没想到偷懒出 ...

  6. Sql 中的索引

    转载:https://www.cnblogs.com/hyd1213126/p/5828937.html

  7. oracle按用户导出导入表

    查看备份目录:select * from dba_directories where directory_name='DATA_PUMP_DIR'; 导入导出的文件名默认都是以备份目录为相对路径. 按 ...

  8. 作业8:常用java命令(二)

    一.jinfo(Configuration Info for Java) 1.功能:jinfo可以实时地查看和调整虚拟机的各项参数. 2.参数: 选项 作用 -flag name 打印改名字的VM设置 ...

  9. C#int类型 转Byte[]

    方法1:使用左移和右移 int转化为byte[]:   public  byte[] intToBytes(int value)         {             byte[] src = ...

  10. 【原创】大叔经验分享(60)hive和spark读取kudu表

    从impala中创建kudu表之后,如果想从hive或spark sql直接读取,会报错: Caused by: java.lang.ClassNotFoundException: com.cloud ...