加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

一次Group By+Order By机能优化说明

发布时间:2019-03-21 13:49:04 所属栏目:编程 来源:周梦康
导读:最近通过一个日记表做排行的时辰发明出格卡,最后题目获得了办理,梳理一些索引和MySQL执行进程的履历,可是最后照旧有5个谜题没解开,但愿各人资助解答下 首要包括如下常识点 用数据措辞证明慢日记的扫描行数到底是怎样统计出来的 从 group by 执行道理找

    2. 读取索引idx_aid_day_pv中的一行,然后查察是否满意前提,假如day字段不在前提范畴内(20181220~20181224之间),则读取下一行;假如day字段在前提范畴内,则把pv值累加(不是             在姑且表中操纵);

    3. 读取索引idx_aid_day_pv中的下一行,假如aid与步调1中同等且满意前提,则pv值累加(不是在姑且表中操纵)。假如aid与步调1中纷歧致,则把之前的功效集写入姑且表;

    4. 轮回执行步调2、3,直到扫描完备个idx_aid_day_pv索引;

    5. 对姑且表按照num的值做优先行列排序;

    6. 按照查询到的前10条的rowid回表(姑且表)返回功效集。

增补声名优先行列排序执行步调说明:

  1. 在姑且表(未排序)中取出前 10 行,把个中的num和rowid作为10个元素组成一个小顶堆,也就是最小的 num 在堆顶。
  2. 取下一行,按照 num 的值和堆顶值作较量,假如该字大于堆顶的值,则替代掉。然后将新的堆做堆排序。
  3. 一再步调2直到第 552203 行较量完成。

该方案可行性

尝试发明,当我增进一行20181219的数据时,固然这行记录不满意我们的需求,可是扫描索引的也会读取这行。由于我做这个尝试,只弄了20181220~201812245天的数据,以是必要扫描的行数正好是全表数据行数。

那么假如该表的数据存储的不是5天的数据,而是10天的数据呢,更可能是365天的数据呢?这个方案是否还可行呢?先模仿10天的数据,在现偶然刻基本上今后加5天,行数与此刻一样785102行。

  1. drop procedure if exists idata;  
  2. delimiter ;;  
  3. create procedure idata()  
  4. begin  
  5.   declare i int;  
  6.   declare aid int;  
  7.   declare pv int;  
  8.   declare post_day int;  
  9.   set i=1;  
  10.   while(i<=785102)do  
  11.     set aid = round(rand()*500000);  
  12.     set pv = round(rand()*100);  
  13.     set post_day = 20181225 + i%5;  
  14.     insert into article_rank (`aid`,`pv`,`day`) values(aid, pv, post_day);  
  15.     set ii=i+1;  
  16.   end while;  
  17. end;;  
  18. delimiter ;  
  19. call idata();  
  20. # Query_time: 9.151270  Lock_time: 0.000508 Rows_sent: 10  Rows_examined: 2122417  
  21. SET timestamp=1552889936;  
  22. select aid,sum(pv) as num from article_rank force index(idx_aid_day_pv) where day>=20181220 and day<=20181224 group by aid order by num desc limit 10;  

这里扫描行数2122417是由于扫描索引的时辰必要遍历整个索引,整个索引的行数就是全表行数,由于我方才又插入了785102行。

当我数据量翻倍之后,这里查询时刻明明已经翻倍。以是这个优化方法不不变。

方案2 扩充姑且表空间上限巨细

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读