mysql怎么插入10w测试数据_mysql快速插入100万测试数据
向數據庫添加100W條測試數據,直接在普通表中添加速度太慢,可以使用內存表添加,然后將內存表數據復制到普通表。
創建表
內存表
DROP TABLE IF EXISTS test_memory;
CREATE TABLE test_memory (
id INT (11) NOT NULL AUTO_INCREMENT,
item1 VARCHAR (20) NOT NULL,
item2 VARCHAR (100) NOT NULL,
PRIMARY KEY (id) USING HASH
) ENGINE = MEMORY AUTO_INCREMENT = 1 CHARACTER
SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Fixed STORAGE MEMORY;
普通表
DROP TABLE IF EXISTS test;
CREATE TABLE test (
id INT (11) NOT NULL AUTO_INCREMENT,
item1 VARCHAR (20) NOT NULL,
item2 VARCHAR (100) NOT NULL,
PRIMARY KEY (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 CHARACTER
SET = utf8;
編寫函數
CREATE FUNCTION str_rand(n INT) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE char_str VARCHAR(255) DEFAULT ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789’;
DECLARE return_str VARCHAR(255) DEFAULT ‘’;
WHILE i < n DO
SET return_str = CONCAT(return_str,substring(char_str, FLOOR(1 + RAND()*62), 1));
SET i = i + 1;
END WHILE;
RETURN return_str;
END
編寫存儲過程
CREATE PROCEDURE add_test_data(IN n int)
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < n DO
INSERT INTO test_memory(item1,item2) VALUES (str_rand(8),MD5(‘123456’));
SET i = i + 1;
END WHILE;
END
調用存儲過程
CALL add_data(1000000);
調用過程可能報錯,The table ‘test_memory’ is full。
解決辦法:
查看內存表大小相關參數
show VARIABLES like ‘%max_heap_table_size%’;
查看臨時表大小控制參數
show VARIABLES like ‘%tmp_table_size%’;
1). 設置新的參數,這樣設置的參數重啟就失效了,
mysql> set global max_heap_table_size=1048576000
mysql> set global tmp_table_size=1048576000
執行完差不多3分鐘。
將內存表數據復制到普通表
INSERT INTO test SELECT * FROM test_memory;
這個過程較快,差不多20秒內。
總結
以上是生活随笔為你收集整理的mysql怎么插入10w测试数据_mysql快速插入100万测试数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机基础职教云答案,计算机基础课程答案
- 下一篇: mysql+nest+嵌套事务_MySQ