DELIMITER ;; CREATE DEFINER=`root`@`%`PROCEDURE`batch_insert_log`() BEGIN DECLARE i INTDEFAULT1; DECLARE userId INTDEFAULT10000000; set @execSql = 'INSERT INTO `big_data`.`user_operation_log`(`user_id`, `ip`, `op_data`, `attr1`, `attr2`, `attr3`, `attr4`, `attr5`, `attr6`, `attr7`, `attr8`, `attr9`, `attr10`, `attr11`, `attr12`) VALUES'; set @execData = ''; WHILE i<=10000000 DO
set @attr = "rand_string(50)"; set @execData = concat(@execData, "(", userId + i, ", '110.20.169.111', '用户登录操作'", ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ")"); if i % 1000 = 0 then set @stmtSql = concat(@execSql, @execData,";"); prepare stmt from @stmtSql; execute stmt; DEALLOCATEprepare stmt; commit; set @execData = ""; else set @execData = concat(@execData, ","); endif; SET i=i+1; ENDWHILE; END DELIMITER ;
delimiter $$ createfunction rand_string(n INT) returnsvarchar(255) #该函数会返回一个字符串 begin #chars_str定义一个变量 chars_str,类型是 varchar(100),默认值'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'; declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'; declare return_str varchar(255) default''; declare i intdefault0; while i do set return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1)); set i = i + 1; endwhile; return return_str; end $$
2.3 执行存储过程函数
因为模拟数据流量是1000W,我这电脑配置不高,耗费了不少时间,应该个把小时吧
SELECTcount(1) FROM`user_operation_log`;
2.4 普通分页查询
MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。