插入千万级别的Mysql数据

需要测试千万级别的数据访问性能,于是首先需要有这么多的数据,表中含有开始时间,结束时间,状态,机床编号等信息,要模拟一年的数据,于是设置两条数据之间时间间隔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()是现在的系统时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值