MySQL百万数据查询优化

问题来源:

  在查询统计的业务中做了一个小型的每隔一分钟的统计服务,实现1分钟,5分钟,1小时,2小时,一天,三天,一月,3月,一年的级联统计.前期数据来源表数据,以及生成的统计表数据都少; 数月之后,慢慢出现数据库连接的异常,以及做一次的统计可能出现了几分钟方可完成.后期采用主键的先做一次分离,以及分页,也是堪忧

  

对比分析:

初始数据:

初始表的设计: id的主键自增

查询sql:

EXPLAIN
SELECT count(id) from t_summary_minute

结果:

 

 1847530的数据

 

查询一分钟内的数据:

EXPLAIN
SELECT
id,type,DAY,update_time,key_type from t_summary_minute where update_time<="2019-09-27 08:47:24" and update_time>="2019-09-27 08:47:23"

查询时间:

2.171s

 

 未使用到索引

 

解决方式:

为update_time添加索引:

再次查询 ,查询时间减少到了 0.031s

EXPLAIN
SELECT id,type,DAY,update_time,key_type from t_summary_minute where update_time<="2019-09-27 08:47:24" and update_time>="2019-09-27 08:47:23"

 

 这次使用到了索引

 

扩展:

提供增加索引以及删除索引的方式:

建立索引:

ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index[索引名](字段名)
eg: alter table t_summary_minute add INDEX index_test_update_time (update_time )

删除索引:

删除索引
     删除索引可以使用ALTER TABLE或DROP INDEX语句来实现。DROP INDEX可以在ALTER TABLE内部作为一条语句处理,其格式如下:

drop index index_name on table_name ;

alter table table_name drop index index_name ;

alter table table_name drop primary key ;

eg: alter table t_summary_minute drop index index_test_update_time ;

 

 

建立索引须谨慎, 查询与插入跟索引都有关系  

  

 

posted @ 2019-11-15 10:38  发哥讲Java  阅读(2103)  评论(0编辑  收藏  举报