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

 

posted @ 2020-05-11 17:14  wanhua.wu  阅读(418)  评论(0编辑  收藏  举报