mysql生成百万级数量测试数据
今天因为项目需要,想测试一下读取百万级数量数据的速度如何,无奈数据库没有现成符合要求的数据,网上百度一番有很都不错的文章,但是需要涉及到一些存储过程和用php代码什么的,虽说可以实现,但是感觉另外再弄这些比较麻烦,没有通用性,于是在几篇文章的参考下,.自己写了一段代码,直接生成的数据还是比较方便的,并且不是重复的数据.网上很多都是重复的,我只是做了一点小的修改,测试数据库是mysql 5.5,存储形式是MyISAM,每次生成的数据量是之前的一倍.测试的量有限,如有什么疑问欢迎评论指正.
首先我的生成table的代码如下:
SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`username_` bigint(255) NOT NULL AUTO_INCREMENT ,
`id_` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL ,
`password_` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL ,
PRIMARY KEY (`username_`)
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci
AUTO_INCREMENT=4345501 ;
这里应该可以看到我的测试主键是username_,设置的是自动增加.
数据表设计完成之后需要插入一条数据,比方说随便插入个(1,1,1),这里就不再多提.
接下来就是和其他的博客所不同的了,直接贴出代码如下:
INSERT INTO USER (id_, password_)
SELECT
MD5(Rand()),
RAND()
FROM
USER
插入的内容直接替换成了md5函数所生成的字符串,当然这里可以用其他的生成函数,或者一时间为随机数种子什么的,或者直接用sbustr直接截取需要的长度都行,根据需要自行发挥就好.直接运行几次就可以达到想要的数据量,我测试的时候10w数据生成时间在1s左右,100w数据生成的时间在20s以内.具体时间如下如下:
Affected rows: 131072
Time: 1.237s Affected rows: 1048576
Time: 11.436s Affected rows: 2097152
Time: 33.112s
下面简单展示一下数据的效果:
8539769 b7dd0b3c4c05c24c17ffbac782380bfa 0.33960725678094406
8539770 76375a066cb84d6917f10f995e3bcab4 0.8744977376186268
8539771 96f64ceebae73c8ad8c70c8454c5e8de 0.5589919803282172
8539772 a6227053399504e8e43f2f270c7c6867 0.7503682642712893
8539773 499e38f691698a8dc9d6b09d8196a348 0.22606947480334852
8539774 f6707b6ba5613bbc976b0b0cd5608694 0.5420059194248225
8539775 87210a1472a3a0ac0a2fb267be926d29 0.2634874724442954
8539776 3a5160cd046a685d6c5bc1d7eb0df006 0.12820897822101504
8539777 873ca65bf8f16cf625cafe66157beb80 0.0645836108034324
8539778 7db474aa795bc426d96fcc227b85acd4 0.07320807787888504
8539779 0b7e470834663bf483b29879cf92d263 0.8097012590707291
8539780 4d87498d6b55d9e4be89cb49f5a2baa1 0.7254514980366933
8539781 17886ec3f1b8a74abccb5b6907ce418a 0.49626740766341554
8539782 56d0a73f1b7b8ae5e4108d1e1c0fc66a 0.9000175398774608
8539783 5771ffc3dd277f0f90bf70e9e50bdeac 0.6339268653038208
8539784 c6dd5f6242b1467b37e7a7754b49a93a 0.9444528584782527
8539785 b287343de15669e13c58783e0bdab87e 0.2392627999552179
8539786 fd216a8220ca4cf01cf354185d7f3670 0.04591774944767146
8539787 078ed0041a8d3c5cd80da0949f1e49c5 0.7190723165116015
8539788 b4df3c411abfbcad9b133f961aa0d205 0.24911454529419033
8539789 45c80eb49d90ac37383f27b3237391a7 0.26152578858800773
8539790 6917c5ccd8b46d2a76752b3eb3d94e45 0.7269593521272385
8539791 1100438096f9a168a9a64b0e2d5c47af 0.45849586972826706
8539792 cd605186ba36701ef566179b286ab04b 0.16878763229473273
8539793 9b1978f674244e393aafa57ce56c9c31 0.08050246264832324
8539794 29381a8b22bb91ff1bd0339b195b1d32 0.010458376268351801
8539795 90924c96c8ecf6b68a11eb67cd97ea38 0.47418726186658
8539796 4958f79ccfa8ae806870da3cb223f00d 0.9154328656526588
8539797 3fb17b3aafe4c17ecb6bafdc7e2d5fd2 0.12553936720410303
8539798 95ed08bbdb31dcc9aba57330fdab5160 0.14635246260683282
8539799 78993b5fac11a8bc35d68422d4ac06d0 0.6508427612957012
8539800 0b7ace71592830815a30fff7caa039db 0.048840577759631514
8539801 9f6d9871ba97d74d4ba78640ee596fd2 0.07038640237449334
8539802 aaded281f2d0057b578a52ae7c58f074 0.8977767218814946
8539803 e968a6d036fcca9abca2b9d9ef905a2a 0.42428037098076227
参考的一些文章列举在下面,如果有什么更好的建议也随时欢迎联系wangkun.it@qq.com.
mysql中迅速插入百万条测试数据的方法 - MokeyChan - 博客园
http://www.cnblogs.com/endtel/p/5404065.html
mysql 快速生成百万条测试数据 - 小哈-whzhaochao - CSDN博客
http://blog.csdn.net/whzhaochao/article/details/49126037
用一条SQL快速生成10万条测试数据 - SQL Server(mssql)数据库栏目 - 红黑联盟
http://www.2cto.com/database/201109/103397.html
mysql生成百万级数量测试数据的更多相关文章
- Sysbench测试神器:一条命令生成百万级测试数据
1. 基准测试 基准测试(benchmarking)是性能测试的一种类型,强调的是对一类测试对象的某些性能指标进行定量的.可复现.可对比的测试. 进一步来理解,基准测试是在某个时候通过基准测试建立一个 ...
- 教你几招,快速创建 MySQL 五百万级数据,愉快的学习各种优化技巧
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...
- MySQL数据库百万级高并发网站实战
在一开始接触PHP接触MYSQL的时候就听不少人说:“MySQL就跑跑一天几十万IP的小站还可以,要是几百万IP就不行了”,原话不记得了,大体 就是这个意思.一直也没有好的机会去验证这个说法,一是从没 ...
- 【转】使用MySQL处理百万级以上数据时,不得不知道的几个常识
---------------------------------------------------------------------------------------------------- ...
- JDBC实现往MySQL插入百万级数据
想往某个表中插入几百万条数据做下测试, 原先的想法,直接写个循环10W次随便插入点数据试试吧,好吧,我真的很天真.... DROP PROCEDURE IF EXISTS proc_initData; ...
- 使用MySQL处理百万级以上数据时,不得不知道的几个常识
最近一段时间参与的项目要操作百万级数据量的数据,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍.之前数据量小的时候,查询语句的好坏不会对执行时间有什么明显的 ...
- 利用JDBC或者事物或者调用存储过程实现往MySQL插入百万级数据
转自:http://www.cnblogs.com/fnz0/p/5713102.html 想往某个表中插入几百万条数据做下测试, 原先的想法,直接写个循环10W次随便插入点数据试试吧,好吧,我真的很 ...
- mysql sql 百万级数据库优化方案
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...
随机推荐
- 关于蓝桥杯嵌入式STM32的一点收获
各社团成员培训时自己总结的一点材料,直接粘过来的,可能有些朋友看不明白,总之这个比赛吧:有很多技巧,掌握到技巧能省我们半个月时间,我说的是针对这个比赛,对于STM32还是要多多练习,总之STM32还是 ...
- web socket教程
web socket是一种网络通信协议,很多网页应用中都会使用到它,比如聊天室,选票等等. 一.为什么需要WebSocket? HTTP是无连接(无连接的含义是限制每次连接只处理一个请求.服务器处理完 ...
- Java web开发中页面跳转小技巧——跳转后新页面在新窗口打开
最近学习Java web,在学习过程中想实现一个需求,就是在jsp页面跳转的时候,希望跳转后的新页面在新窗口中打开, 而不是覆盖原来的页面,这个需求使我困惑了好长时间,后来通过大海捞针似的在网上寻找方 ...
- ABP入门系列(18)—— 使用领域服务
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1.引言 自上次更新有一个多月了,发现越往下写,越不知如何去写.特别是当遇到DDD中一些概念术语的 ...
- [转]tomcat部署(1)
阅读目录 1 目录结构 2 部署 3 发布 4 测试 本篇参考Tomcat官方文档:<First Webapp>翻译,并结合自己的开发经验介绍关于tomcat部署以及发布的相关内容. ...
- HTTPS协议入门
目录什么是https?https的利与弊?https的原理和流程?什么是证书/CA证书?什么是单向SSL认证与双向SSL认证?网站如何实现https?网站实现https的一些补充说明参考网页 一.什么 ...
- [BZOJ1597]土地购买
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...
- Hadoop和MapReduce初识
我们生活在大数据时代!!!微博.微信.云存储等大数据的需求,Hadoop由此诞生. 以下面部分数据为例: 1)Facebook存储着约100亿张照片,约1PB存储容量: 2)纽约证券交易所每天产生1T ...
- 进程控制fork与vfork
1. 进程标识符 在前面进程描述一章节里已经介绍过进程的两个基本标识符pid和ppid,现在将详细介绍进程的其他标识符. 每个进程都有非负的整形表示唯一的进程ID.一个进程终止后,其进程ID就可以再次 ...
- 页面实现多个定时器(计时器)时选用NSTimer还是GCD?(干货不湿)
定时器在我们每个人做的iOS项目里面必不可少,如登录页面倒计时.支付期限倒计时等等,一般来说使用NSTimer创建定时器: + (NSTimer *)timerWithTimeInterval:(NS ...