zoukankan      html  css  js  c++  java
  • mysql查询效率提高技巧

    需求:

    有一个表t_mail_send_extend, 主键唯一索引是id,因为数据量达到了500多万,占用磁盘空间62GB,现在考虑使用mycat进行分表,分表之前需要将数据提前从mycql查询然后插入到mycat中的分表中,在查询过程中会遇到查询效率问题,越往后越慢

    一般的查询:(通过控制limit来查询数据,这样越往后越慢) 若干秒过去了还没查到!

    SELECT * FROM t_mail_send_extend WHERE id > 4000000 AND id <= 4500000 LIMIT 450000,100;

    其他技巧1:(这种方式快是快,但是不方便要做两次查询)

    1,先查询id(因为SELECT * 实在太慢了!)  284ms

    SELECT id FROM t_mail_send_extend WHERE id > 4000000 AND id <= 4500000 LIMIT 450000,100;

    2,再根据id查询所有数据   431ms

    SELECT * FROM t_mail_send_extend WHERE id in (4450001,4450002, ... ..., 4450100);

    其他技巧2:(最快的方式,只控制id大小来查询)334ms

    SELECT * FROM t_mail_send_extend WHERE id > 5000000 LIMIT 100;

    即使是500万之后速度依然很快,只需要334毫秒

    但是有个问题这样很依赖id自增的特性,如果id不连续的情况下id查询条件计算错误可能会导致数据重复,但是id是主键唯一索引这样清空可以在插入的时候ignore

  • 相关阅读:
    SpringMVC工作原理
    Centosyum方式安装nginx
    centos7通过yum安装JDK1.8
    经典SQL语句
    Jquery选择器
    JS获取当前日期并定时刷新
    MyEclipse快捷键大全
    强大的Layui前端框架地址
    MFC 实现来回滚动效果的进度条
    CImageList* 转 LPDISPATCH 在控件中显示图片
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/12870320.html
Copyright © 2011-2022 走看看