• 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

  • 相关阅读:
    【随笔】新博客
    【Linux】grep命令
    【C/C++】C++11 Move, Forward
    【C/C++】C++11 Variadic Templates
    【C/C++】C++11 Lambda
    【Linux】gdb调试
    【C/C++】数组 & 指针
    【PAT】反转链表
    【OS】Process & Thread
    【Python】Scrapy基础
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/12870320.html
Copyright © 2020-2023  润新知