mysql 如何插入随机字符串数据的实现方法
应用场景
有时需要测试插入数据库的记录来测试,所以就非常需要用到这些脚本。
创建表
CREATE TABLE `tables_a` ( `id` int(10) NOT NULL DEFAULT '0', `name` char(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建产生随机字符串的函数
set global log_bin_trust_function_creators = 1; DROP FUNCTION IF EXISTS rand_string; DELIMITER // CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255) BEGIN DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; DECLARE return_str varchar(255) DEFAULT ''; DECLARE i INT DEFAULT 0; WHILE i < n DO SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()62 ),1)); SET i = i +1; END WHILE; RETURN return_str; END // delimiter ;
创建插入表的procedure,x是从多少开始。y是多少结束,z是产生多少位随机数
delimiter // create procedure test(x int(10),y int(10),z int(10)) begin DECLARE i INT DEFAULT x; while i<y do insert into tables_a values(i,rand_string(z)); set i=i+1; end whi
mysql随机数据生成并插入
dblp数据库中引用信息很少,平均一篇论文引用0.2篇。使用dblp做实验数据集的某篇论文提到,可以随机添加引用信息。受此启发,我打算为每一篇论文都添加20篇随机引用,于是就写出了如下的sql语句
String sql = "insert into citation(pId1,pId2) values( (select pId from papers limit ?,1),(select pId from papers limit ?,1))";
使用preparedstatement,以batch方式提交数据库。
第一个参数是paper的rowid信息,从0~N(N为papers的total row)。第二个参数是Java生成的20个不重复的随机数,范围是0-N。然后嵌套在for循环里,每1w条数据提交给数据库一次。
这段代码巧妙运用limit的特性完成随机选tuple,本来是暗暗得意的。自以为把所有的select都交给数据库去做了,省去了通过jdbc的多次连接,应该是很快就可以运行完成的。哪知,插了不过10w条(1000010)数据,就耗时22分钟之多。最终的实验需要插入400w条数据,也就是说要花14h左右。
于是开始反思,不断做写类似的程序查找时间瓶颈,最终锁定在select limit,这个操作极耗时间。当初选用limit,原因在于随机生成的是数字,要把数字映射到tuple,也就是对应到rowid;由于papers表的主键并非递增int,所以默认的rowid不存在。后来一想,可以在papers表上先增加一个auto_increment的temp列,完成citation插入后再删除。这样sql语句就改成了
String sql = "insert into citation(pId1,pId2) values((select pId from papers where temp=?), (select pId from papers where temp=?))";
再一次插入10w条数据,耗时38s。效率大幅提高,但不知道还可不可以进一步优化。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程