插入千万级别的Mysql数据

xiaoxiao2021-02-28  11

需要测试千万级别的数据访问性能,于是首先需要有这么多的数据,表中含有开始时间,结束时间,状态,机床编号等信息,要模拟一年的数据,于是设置两条数据之间时间间隔30秒,开始时间和结束时间相差1秒钟,状态交替变化(0、1两个状态)。 假如你用的 InnoDB 模式,如果表中没有外键的话,可以ALTER TABLE test ENGINE = MYISAM; 把存储模式改为 MYISAM ,结束后再改为InnoDB。因为 MYISAM 插入数据的速度比 InnoDB 快好多。有外键的话比较麻烦,这里不再详述。 DELIMITER $$   这句话是把默认的结束符改为$$,默认是分号“;”    而我们下面的函数有好多分号,我们并不想分号执行,于是替换为$$. SET AUTOCOMMIT = 0$$   这里关闭自动提交 DROP PROCEDURE IF EXISTS t1$$ CREATE PROCEDURE t1()    创建函数 BEGIN   开始   DECLARE i INT DEFAULT 0;   DECLARE j INT DEFAULT 0;   WHILE (i <= 1051200) DO           一年内有1051200个30秒   INSERT INTO `mt_machine_status_computed` (`start`, `end`,`status`,`machine_tool_id`,`shift_id`) VALUES   (DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND),DATE_SUB(NOW(),INTERVAL (1051200-i)*30-1 SECOND),i%2,1,1);   INSERT INTO `mt_machine_status_computed` (`start`, `end`,`status`,`machine_tool_id`,`shift_id`) VALUES   (DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND),DATE_SUB(NOW(),INTERVAL (1051200-i)*30-1 SECOND),i%2,2,1);   INSERT INTO `mt_machine_status_computed` (`start`, `end`,`status`,`machine_tool_id`,`shift_id`) VALUES   (DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND),DATE_SUB(NOW(),INTERVAL (1051200-i)*30-1 SECOND),i%2,3,1);   INSERT INTO `mt_machine_status_computed` (`start`, `end`,`status`,`machine_tool_id`,`shift_id`) VALUES   (DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND),DATE_SUB(NOW(),INTERVAL (1051200-i)*30-1 SECOND),i%2,4,1); INSERT INTO `mt_machine_status_computed` (`start`, `end`,`status`,`machine_tool_id`,`shift_id`) VALUES   (DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND),DATE_SUB(NOW(),INTERVAL (1051200-i)*30-1 SECOND),i%2,5,1); INSERT INTO `mt_machine_status_computed` (`start`, `end`,`status`,`machine_tool_id`,`shift_id`) VALUES   (DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND),DATE_SUB(NOW(),INTERVAL (1051200-i)*30-1 SECOND),i%2,6,1); INSERT INTO `mt_machine_status_computed` (`start`, `end`,`status`,`machine_tool_id`,`shift_id`) VALUES   (DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND),DATE_SUB(NOW(),INTERVAL (1051200-i)*30-1 SECOND),i%2,7,1); INSERT INTO `mt_machine_status_computed` (`start`, `end`,`status`,`machine_tool_id`,`shift_id`) VALUES   (DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND),DATE_SUB(NOW(),INTERVAL (1051200-i)*30-1 SECOND),i%2,8,1); INSERT INTO `mt_machine_status_computed` (`start`, `end`,`status`,`machine_tool_id`,`shift_id`) VALUES   (DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND),DATE_SUB(NOW(),INTERVAL (1051200-i)*30-1 SECOND),i%2,9,1); INSERT INTO `mt_machine_status_computed` (`start`, `end`,`status`,`machine_tool_id`,`shift_id`) VALUES   (DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND),DATE_SUB(NOW(),INTERVAL (1051200-i)*30-1 SECOND),i%2,10,1);   SET i = i + 1;   IF MOD(i,1000)=0 THEN COMMIT;       END IF;   END WHILE; END;$$   结束 DELIMITER ; CALL t1(); DATE_SUB(NOW(),INTERVAL (1051200-i)*30 SECOND) 解释: DATE_SUB()是从日期减去指定的时间间隔,单位可以是 YEAR,MONTH,WEEK,DAY,HOUR, MINUTE,SECOND等等。  NOW()是现在的系统时间。
转载请注明原文地址: https://www.6miu.com/read-450257.html

最新回复(0)