zoukankan      html  css  js  c++  java
  • 使用折半查找法删除

    DELIMITER //
    DROP PROCEDURE IF EXISTS `PRO_BinarySearch_DeleteData` ;
    CREATE PROCEDURE PRO_BinarySearch_DeleteData(IN p_tab VARCHAR(50),IN p_key1  VARCHAR(30), IN p_key2 VARCHAR(30),IN p_date DATETIME)
    BEGIN
    /*折半查找最大主键ID*/
    /*Auther:Gerald*/
    SET @v_str =
    CONCAT('select 
        max(
    ',p_key1,') into @v_maxid 
    from 
        
    ',p_tab);
        
    PREPARE stmt FROM @v_str;
    EXECUTE stmt;


    SET @v_str=
    CONCAT('SELECT 
        min(
    ',p_key1,') INTO @v_minid 
    FROM 
        
    ',p_tab);

    PREPARE stmt FROM @v_str;
    EXECUTE stmt;

    SELECT UNIX_TIMESTAMP(p_date) INTO @v_date;

    SET @v_id=@v_minid;
    WHILE @v_minid<=@v_maxid DO 
        SELECT CEIL((@v_minid+@v_maxid)/2INTO @v_midid;
        SET @v_str =CONCAT('select ',p_key2,' into @v_created_at from ',p_tab,' where ',p_key1,'>=@v_midid order by 1 limit 1');
        
        PREPARE stmt FROM @v_str;
        EXECUTE stmt;
        

        /*right*/
        IF @v_created_at<=@v_date THEN 
        SET @v_minid=@v_midid+1;
        END IF;
        
        /*left*/
        IF @v_created_at>=@v_date THEN
        SET @v_maxid=@v_midid-1;
        END IF;
    END WHILE;

    /*分批次删除历史数据*/
    SET @rowcnt=0;
    START TRANSACTION;
    cursor_loop:LOOP
        set @v_str =CONCAT('DELETE FROM ',p_tab,' WHERE ',p_key1,'=',@v_id);
        PREPARE stmt FROM @v_str;
        EXECUTE stmt;
        
        SET @rowcnt=@rowcnt+1;
        IF @rowcnt=1000 THEN
            SET @rowcnt =0 ;
            COMMIT;
            START TRANSACTION;
        END IF ;
        SET @v_id=@v_id+1;
        IF @v_id > @v_midid THEN
            LEAVE cursor_loop ;
        END IF ;
    END LOOP cursor_loop ;
    COMMIT ;

    SELECT @v_midid;
    END;
    //


    DELIMITER  ;
  • 相关阅读:
    文件传输协议FTP
    过河问题 还是不会 去学请教一下 数学老师 -----
    ----堆栈 STL 函数库 ----有待补充
    UVa 101
    例题 5-1 STL
    课后题 3-3 水题
    第八届河南省省赛 A.挑战密室
    课后题--------求分子量-----Molar mass------
    课后题3-1
    ---------快排-----表排-----基数排序(桶排序)-----
  • 原文地址:https://www.cnblogs.com/zeromyth/p/2515169.html
Copyright © 2011-2022 走看看