如何用10亿行填充MySQL中的测试表?

时间:2017-03-07 01:07:50

标签: mysql

我想用MySQL索引做一些测试,并希望通过实验来看到不同类型的索引(覆盖,聚类)对不同查询的影响。

我有一个非常简单的表格,包含3个字符串,a,b,c。

DROP TABLE IF EXISTS test_table;
CREATE TABLE IF NOT EXISTS test_table (
    a INT UNSIGNED NOT NULL,
    b INT UNSIGNED NOT NULL,
    c INT UNSIGNED NOT NULL
);

然后我创建了一个存储过程,用1到100的随机值填充1000次。

DROP PROCEDURE IF EXISTS test_procedure;
DELIMITER //
CREATE PROCEDURE test_procedure
(IN loop_amount INT)
BEGIN
    DECLARE rand_max INT DEFAULT 99;
    DECLARE a, b, c INT;
    DECLARE i INT DEFAULT 0;
    TRUNCATE TABLE test_table;
    WHILE i < loop_amount DO
        SET a = RAND() * rand_max + 1;
        SET b = RAND() * rand_max + 1;
        SET c = RAND() * rand_max + 1;
        INSERT INTO test_table VALUES (a, b, c);
        SET i = i + 1;
    END WHILE;
END //
DELIMITER ;

CALL test_procedure(1000);

我无法多次运行,因为它在1000次循环后变得缓慢。

然后我把桌子加倍了13次。

DROP PROCEDURE IF EXISTS test_procedure;
DELIMITER //
CREATE PROCEDURE test_procedure
(IN loop_amount INT)
BEGIN
    DECLARE i INT DEFAULT 0;
    WHILE i < loop_amount DO
        INSERT INTO test_table SELECT * FROM test_table;
        SET i = i + 1;
    END WHILE;
END //
DELIMITER ;

CALL test_procedure(13);

但是现在它有大约1600万行,但我不能再运行这个功能,因为运行它需要一分钟,参数为1,加倍一次需要一分钟,下一次加倍需要2分钟等。我可以加快10亿吗?

SELECT COUNT(*) FROM test_table;也很慢。如何加快确认工作台尺寸?

1 个答案:

答案 0 :(得分:0)

load data local infile 'c:\a.txt' into table test_table;

[SQL] 加载数据本地infile&#39; c:\ a.txt&#39;进入表test_table; 受影响的行:1000000 时间:12.177s