亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 基礎知識 > 正文

Session重疊問題學習 -最優化

2024-09-12 20:29:52
字體:
來源:轉載
供稿:網友

       這一周連續優化Session合并和拆分問題.每天都比前一天提升性能一倍以上.
       終于在今天,用獨創的小花貍Session合并算法達到了最優級別.
 
       令人振奮的1.5秒到2秒級別.
 
       時間已經很晚了,思路也有些不清晰了.先把代碼貼出來.下周再仔細解釋一下這個奇妙算法。
 
DELIMITER $$  
  
CREATE DEFINER=`root`@`localhost` PROCEDURE `p`()  
BEGIN    
    declare done int default 0;        
    declare v_roomid bigint;    
    declare v_time timestamp(6);    
    declare v_cur_type smallint;  
  
    declare v_before_roomid bigint default -1;  
    declare v_before_type smallint default -1;  
    declare v_before_time timestamp(6) ;  
  
    declare v_num bigint default 0;  
  
  
    declare cur_test CURSOR for select roomid,type,timepoint from tmp_time_point order by roomid,timepoint,type ;  
    DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET done = 1;        
  
        
    drop table if exists t1;    
    drop table if exists t2;  
    drop table if exists tmp_time_point;    
    drop table if exists tmp_result;  
    drop table if exists tmp_min_range;  
  
    CREATE temporary TABLE `t1` (    
      `roomid` int(11) NOT NULL DEFAULT '0',    
      `userid` bigint(20) NOT NULL DEFAULT '0',    
      `s` timestamp(6),    
      `e` timestamp(6),    
      primary KEY `roomid` (`roomid`,`s`,`e`,`userid`)    
    ) ENGINE=memory;    
  
   CREATE temporary TABLE `t2` (    
      `roomid` int(11) NOT NULL DEFAULT '0',    
      `s` timestamp(6),    
      `e` timestamp(6),    
      primary KEY `roomid` (`roomid`,`s`,`e`)    
    ) ENGINE=memory;    
  
    CREATE temporary TABLE `tmp_min_range` (    
      `roomid` int(11) NOT NULL DEFAULT '0',    
      `s` timestamp(6),    
      `e` timestamp(6),    
      primary KEY `roomid` (`roomid`,`s`,`e`),  
      key(roomid,e)  
    ) ENGINE=memory;    
  
    create temporary table tmp_time_point(    
            roomid bigint,    
            timepoint timestamp(6),    
            type smallint,  
            key(roomid,timepoint)    
    ) engine=memory;    
      
    create temporary table tmp_result(    
            roomid bigint,    
            timepoint timestamp(6),  
            c int  
    ) engine=memory;    
    
SET @A=0;    
SET @B=0;    
insert into t1(roomid,userid,s,e)  
select distinct      
roomid,  userid,      
if(date(s)!=date(e) and id>1,date(s+interval id-1 date(s+interval id-1 date(e) ,e,date_format(s+interval id-1 '%Y-%m-%d 23:59:59')) e      
from (      
    SELECT x.roomid,x.userid,s,e    
    FROM   
    (  
        (  
            SELECT @B:=@B+1 AS id,roomid,userid,s    
            FROM (    
                SELECT DISTINCT roomid, userid, roomstart AS s        
                FROM u_room_log a        
                WHERE NOT EXISTS (SELECT *        
                    FROM u_room_log b        
                    WHERE a.roomid = b.roomid        
                        AND a.userid = b.userid        
                        AND a.roomstart > b.roomstart        
                        AND a.roomstart <= b.roomend)  
            ) AS p  
        ) AS x,    
        (  
            SELECT @A:=@A+1 AS id,roomid,userid,e    
            FROM   
            (    
                SELECT DISTINCT roomid, userid, roomend AS e        
                FROM u_room_log a        
                WHERE NOT EXISTS (SELECT *        
                    FROM u_room_log b        
                    WHERE a.roomid = b.roomid        
                        AND a.userid = b.userid        
                        AND a.roomend >= b.roomstart        
                        AND a.roomend < b.roomend)    
            ) AS o  
        ) AS y    
    )   
    WHERE x.id = y.id AND x.roomid = y.roomid AND x.userid = y.userid      
) t1 ,      
nums       
where  nums.id<=datediff(e,s)+1      
;      
  
insert into t2 (roomid,s,e)  
select roomid,  
s+interval startnum/1000000 second s,  
e-interval endnum/1000000 second e  
 from (  
    select   
    roomid,  
    s,e,  
    startnum,  
    when @eflag=eflag then @rn:=@rn+1 when @eflag:=eflag then @rn else @rn end endnum  
    from (  
        select * from (  
            select when @sflag=sflag then @rn:=@rn+1 when @sflag:=sflag then @rn else @rn end startnum,roomid,s,e,sflag,eflag from  
            (  
                select * from   
                (  
                    select t1.*,concat('[',roomid,'],',s) sflag,concat('[',roomid,'],',e) eflag from t1 order by roomid ,sflag  
                )a,(select @sflag:='',@rn:=0,@eflag:='') vars  
            ) b    
        ) bb order by roomid,eflag  
    ) c  
) d ;  
   
    insert into tmp_time_point(roomid,timepoint,type) select roomid,s,1 from t2;  
    insert into tmp_time_point(roomid,timepoint,type) select roomid,e,0 from t2;  
     
    insert into tmp_min_range(roomid,s,e)  
                select distinct roomid,starttime  starttime, endtime  endtime from (    
                    select     
                    if(@roomid=roomid,@d,'')  as starttime,@d:=str_to_date(timepoint,'%Y-%m-%d %H:%i:%s.%f'),@roomid:=roomid,p.roomid,str_to_date(timepoint,'%Y-%m-%d %H:%i:%s.%f') endtime    
                    from tmp_time_point p,(select @d:='',@roomid:=-1) vars    
                    order by roomid,timepoint    
                ) v4 where starttime!='' and date(starttime)=date(endtime);  
  
    open cur_test;        
    repeat        
        fetch cur_test into v_roomid,v_cur_type,v_time;        
        if done !=1 then      
            -- 第一行或者每個房間的第一行  
            if v_before_roomid=-1 or v_roomid!=v_before_roomid  then  
                set v_before_roomid:=v_roomid;  
                set v_before_type:=1;  
                set v_before_time:='0000-00-00 00:00:00';  
                set v_num:=0;  
            end if;  
              
              
            if v_before_type=1  then  
           
                set v_num:=v_num+1;  
        
                insert into tmp_result(roomid,timepoint,c) values(v_roomid,v_time,v_num);  
            end if;  
              
            if v_before_type=0 then  
                 
                set v_num:=v_num-1;  
  
                insert into tmp_result(roomid,timepoint,c) values(v_roomid,v_time,v_num);  
            end if;  
  
            set v_before_roomid:=v_roomid;  
            set v_before_type:=v_cur_type;  
            set v_before_time:=v_time;  
        end if;      
    until done end repeat;        
    close cur_test;     
    
    select roomid,date(s) dt,round(second,date_format(s,'%Y-%m-%d %H:%i:%s'),date_format(e,'%Y-%m-%d %H:%i:%s')))/60) ts,max(c)-1 c from (       
        select a.roomid,a.s,a.e,r.c,r.timepoint from tmp_result r   
        inner join   
        tmp_min_range a on( r.timepoint=a.e and r.roomid=a.roomid)  
        where     c>2  
    ) a group by roomid,date(s);    
  
END  
 
和之前的算法比較,結果一致。基本上都在1.6秒左右.

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久国产精品亚洲| 成人深夜直播免费观看| 欧美性xxxx极品hd欧美风情| 亚洲综合精品伊人久久| 日本道色综合久久影院| 51ⅴ精品国产91久久久久久| 日韩中文字幕第一页| 久久琪琪电影院| 亚洲视频在线免费看| 国产99视频精品免视看7| 亚洲欧美日韩成人| 国产成人亚洲综合| 91免费欧美精品| 欧美性xxxx极品hd欧美风情| 亚洲男人天堂2024| 韩曰欧美视频免费观看| 国产精自产拍久久久久久蜜| 92福利视频午夜1000合集在线观看| 国产成人在线视频| 色噜噜亚洲精品中文字幕| 亚洲精品久久久久久下一站| 精品中文字幕视频| 亚洲免费福利视频| 国产午夜精品免费一区二区三区| 成人写真视频福利网| 欧美极品第一页| 欧美人成在线视频| 久久综合久久八八| 亚洲第一精品夜夜躁人人爽| 538国产精品一区二区在线| 一区二区三区 在线观看视| 欧亚精品在线观看| 欧美成人精品一区| 日韩欧中文字幕| 亚洲精品www久久久| 成人天堂噜噜噜| 91精品久久久久久| 一个人看的www欧美| 成人444kkkk在线观看| 国产亚洲精品成人av久久ww| 亚洲精品福利视频| 日韩精品黄色网| 国产精品亚洲综合天堂夜夜| 欧美性极品xxxx娇小| 欧美巨乳在线观看| 亚洲香蕉av在线一区二区三区| 亚洲国产美女精品久久久久∴| 欧美在线亚洲一区| 丝袜情趣国产精品| 欧美电影免费观看电视剧大全| 一区二区三区视频免费在线观看| 欧美黑人极品猛少妇色xxxxx| 欧美日韩国产成人在线| 国产精品美女主播| 国产精品盗摄久久久| 久久人91精品久久久久久不卡| 一区国产精品视频| 国产原创欧美精品| 国产精品自产拍高潮在线观看| 欧美视频一二三| 日韩免费观看av| 色婷婷av一区二区三区久久| 国产97色在线| 亚洲精品免费在线视频| 国产精品入口夜色视频大尺度| 国产精品入口夜色视频大尺度| 国产精品久久久久久久9999| 成人深夜直播免费观看| 91牛牛免费视频| 搡老女人一区二区三区视频tv| 久久99久久99精品免观看粉嫩| 亚洲国内精品在线| 91精品在线观| 亚洲丝袜在线视频| 亚洲老司机av| 亚洲激情自拍图| 久久影视免费观看| 欧美性猛交视频| 欧美丝袜美女中出在线| 91沈先生在线观看| 精品久久久香蕉免费精品视频| 色综合天天狠天天透天天伊人| 国产精品人成电影| 狠狠色噜噜狠狠狠狠97| 精品国产鲁一鲁一区二区张丽| 中文字幕一区二区三区电影| 欧美日韩免费区域视频在线观看| 久久视频免费观看| 97色在线观看| 国产美女被下药99| www.国产一区| 国产91色在线| 亚洲成人精品久久久| 日韩在线观看电影| 国产一区香蕉久久| 国产精品亚发布| 亚洲精品电影网站| 久久久久久久久久国产精品| 国产精品69精品一区二区三区| 亚洲第一视频网站| 欧美裸体视频网站| 国产亚洲视频中文字幕视频| 2019中文字幕在线观看| 91久久精品一区| 亚洲人成77777在线观看网| 一夜七次郎国产精品亚洲| 日本亚洲欧美三级| 国产成人jvid在线播放| 欧美又大粗又爽又黄大片视频| 不卡毛片在线看| 国产精品白嫩初高中害羞小美女| 97免费视频在线播放| 韩国欧美亚洲国产| 欧美在线中文字幕| 91免费综合在线| 国产精品久久久久久久久影视| 久久综合伊人77777| 色阁综合伊人av| 日韩在线观看免费全集电视剧网站| 久久中国妇女中文字幕| 亚洲人成在线观看网站高清| 日韩中文字在线| 国产精品27p| 欧美国产日本在线| 久久国产精品影视| 欧美电影免费看| 成人在线视频福利| 91九色单男在线观看| 亚洲精品国产精品国产自| 精品二区三区线观看| 欧美大尺度激情区在线播放| 成人精品久久av网站| 久久久久国产精品www| 欧美一级淫片丝袜脚交| 精品一区二区亚洲| 欧美日韩综合视频网址| 国内精品中文字幕| 国产精品最新在线观看| 午夜精品一区二区三区在线| 国产精品男女猛烈高潮激情| 亚洲国产天堂久久综合网| 中文字幕亚洲综合| 亚洲а∨天堂久久精品喷水| 久久91亚洲人成电影网站| 亚洲欧美日韩视频一区| 美女国内精品自产拍在线播放| 久久99精品久久久久久噜噜| 国产精品高清网站| 美女扒开尿口让男人操亚洲视频网站| 亚洲成年人在线播放| 国产美女精品视频| 欧洲永久精品大片ww免费漫画| 亚洲精品国产精品乱码不99按摩| 亚洲韩国日本中文字幕| 国产极品jizzhd欧美| 欧美日韩亚洲一区二区三区| 91成人国产在线观看| 中文国产成人精品久久一| 国产日韩欧美在线观看| 麻豆精品精华液| 国产精品第2页| 亚洲精品永久免费精品| 国产精品揄拍500视频| 91精品国产91久久久久久最新|