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 ;

 

 

建立索引須謹慎, 查詢與插入跟索引都有關系  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM