mysql怎么插入10w测试数据_mysql快速插入100万测试数据
向數(shù)據(jù)庫(kù)添加100W條測(cè)試數(shù)據(jù),直接在普通表中添加速度太慢,可以使用內(nèi)存表添加,然后將內(nèi)存表數(shù)據(jù)復(fù)制到普通表。
創(chuàng)建表
內(nèi)存表
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;
編寫(xiě)函數(shù)
CREATE FUNCTION str_rand(n INT) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE char_str VARCHAR(255) DEFAULT ‘a(chǎn)bcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789’;
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
編寫(xiě)存儲(chǔ)過(guò)程
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
調(diào)用存儲(chǔ)過(guò)程
CALL add_data(1000000);
調(diào)用過(guò)程可能報(bào)錯(cuò),The table ‘test_memory’ is full。
解決辦法:
查看內(nèi)存表大小相關(guān)參數(shù)
show VARIABLES like ‘%max_heap_table_size%’;
查看臨時(shí)表大小控制參數(shù)
show VARIABLES like ‘%tmp_table_size%’;
1). 設(shè)置新的參數(shù),這樣設(shè)置的參數(shù)重啟就失效了,
mysql> set global max_heap_table_size=1048576000
mysql> set global tmp_table_size=1048576000
執(zhí)行完差不多3分鐘。
將內(nèi)存表數(shù)據(jù)復(fù)制到普通表
INSERT INTO test SELECT * FROM test_memory;
這個(gè)過(guò)程較快,差不多20秒內(nèi)。
總結(jié)
以上是生活随笔為你收集整理的mysql怎么插入10w测试数据_mysql快速插入100万测试数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机基础职教云答案,计算机基础课程答案
- 下一篇: webform中提交按钮同时执行更新和插