【MySQL】MySQL快速插入大量數據


起源

在公司優化SQL遇到一個索引的問題,晚上回家想繼續驗證,無奈沒有較多數據的表,於是,想造一些隨機的數據,用於驗證。

於是

於是動手寫。由於自己不是MySQL能手,寫得也不好。最后,插入的速度也不快,我使用的是MySQL的InnoDB引擎,電腦跑了差不多一通宵才插入100W數據(為自己的程序汗顏)。雖然這樣,我還是再次保留這份代碼,以防下次要使用。嘿嘿。(插入時切換成MyISAM引擎,插入速度會快很多,插入完畢再切換回來)

這里開始,備份我的代碼

需要插入數據的表:

create table `t_member` (
	`id` int (11),
	`member_no` varchar (36),
	`user_name` varchar (384),
	`register_date` datetime 
); 

生成隨機數字的函數:

DELIMITER $$

USE `demo`$$

DROP FUNCTION IF EXISTS `f_rand_num`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `f_rand_num`(
    start_num BIGINT,
    end_num BIGINT
) RETURNS bigint(20)
BEGIN
    RETURN FLOOR(start_num + RAND() * (end_num - start_num + 1));
END$$

DELIMITER ;

生成隨機N位字符串的函數:

DELIMITER $$

USE `demo`$$

DROP FUNCTION IF EXISTS `f_rand_str`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `f_rand_str`(l INT) RETURNS varchar(256) CHARSET utf8
BEGIN
	DECLARE chars_range varchar(128) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
	DECLARE random_str varchar(256) DEFAULT '';
	DECLARE i INT DEFAULT 0;
	
	WHILE i < l DO
	    SET random_str = concat(random_str, char(ascii('a') + f_rand_num(0, 25)));
	    SET i = i +1;
	END WHILE;
	
	RETURN random_str;
    END$$

DELIMITER ;

插入數據的存儲過程:

DELIMITER $$

USE `demo`$$

DROP PROCEDURE IF EXISTS `p_make_data`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_make_data`(l INT)
BEGIN
	DECLARE i INT DEFAULT 0;
	
	WHILE i < l DO
	    insert into `t_member` (`member_no`, `user_name`, `register_date`) 
		values(f_rand_num(100000000000, 999999999999), f_rand_str(8), '2016-08-01');
	    SET i = i + 1;
	    
	    IF (i % 1000 = 0) THEN
		select @i;
	    END IF;
	    
	END WHILE;
    END$$

DELIMITER ;

附一些測試SQL:

-- 調用過程
call p_make_data(500000);

-- 一些測試SQL
select f_rand_num(100000000000, 999999999999);
select f_rand_str(8);
select ORD('97');
select substring('hello', 5, 1);
select ascii('a');
select char(97);
select 100 % 5;
select count(1) from t_member t order by t.`id` desc;

后來的話(非常重要哦!)

后來參考了一篇文章,它提及,轉換為MyISAM引擎插入數據速度會快很多,插入完畢后再轉換回來InnoDB引擎使用,另外文章中還提及了一些提高速度的小訣竅,大家可以去看:mysql快速保存插入大量數據一些方法總結


免責聲明!

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



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