我想用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;
也很慢。如何加快确认工作台尺寸?
答案 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