MySQL-2-如何制造百万千万级+数据
MySQL-2-如何制造百万千万级+数据
1、十分钟单表造:10w,没想到我的机器太差劲了,重点还是单表~
意外,今天想看看SQL存储过程是什么东西,如何制造百万千万级+数据,有它应该也可以的。
突然看到了SQL是和其它编程语言类似...
CREATE DEFINER=`root`@`%` PROCEDURE `my_insert`(IN `num` int)BEGIN-- RAND(): 返回0到1内的随机值-- FLOOR():返回小于x的最大整数值 DECLARE i INT DEFAULT 1; DECLARE n INT DEFAULT 1; DECLARE head char(3);-- 3位开头初始值 DECLARE bodys varchar(100) default "130 131 132 133 134 135 136 137 138 139 186 187 189 151 157"; DECLARE starts int; DECLARE chars_str varchar(20) DEFAULT '0123456789'; DECLARE return_str varchar(255) DEFAULT ''; DECLARE phone varchar(20); WHILE i <= num DO -- 生成3位开头 SET starts = 1+floor(rand()*15)*4; SET head = trim(substring(bodys,starts,3)); -- 生成8位尾号 WHILE n <= 8 DO SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*10 ),1)); SET n = n +1; END WHILE; SET phone = trim(concat(head,return_str)); -- 插入数据 insert into `user`(uuid,phone,pwd,age,date_time) values(UUID(),phone,PASSWORD(i),FLOOR(RAND()*10),NOW()); SET i=i+1; SET n=1; SET return_str=''; end while;END
2、硬件机器:执行过程中top,显示mysql cpu使用率20%左右
3、数据检查
6个字段,电话号有重复...
4、电话号码字段好多重复:10w里有574
如果需要唯一这可咋搞?
可能得用这种方式:3位开头+8位(00000000),从00000001-99999999这样有1千万,如果再结合3位主流开头号码,总共有20个左右,20*1千万,满足了吧?
以3位开头为一个列表,先遍历第一个3位开头,在拼接从00000001-99999999,妥了。
5、还以为uuid也有重复的(不存在的)
UUID由以下几部分的组合: (1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。 (3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。 UUID的唯一缺陷在于生成的结果串会比较长。
但是百度百科看到这个还挺厉害的:UUID最少在3000+年内不会重复