MySQL-2-如何制造百万千万级+数据

1、十分钟单表造:10w,没想到我的机器太差劲了,重点还是单表~

意外,今天想看看SQL存储过程是什么东西,如何制造百万千万级+数据,有它应该也可以的。

MySQL-2-如何制造百万千万级+数据

突然看到了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%左右

MySQL-2-如何制造百万千万级+数据

3、数据检查

6个字段,电话号有重复...

MySQL-2-如何制造百万千万级+数据

4、电话号码字段好多重复:10w里有574

 如果需要唯一这可咋搞?

MySQL-2-如何制造百万千万级+数据

 可能得用这种方式: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的唯一缺陷在于生成的结果串会比较长。

MySQL-2-如何制造百万千万级+数据

但是百度百科看到这个还挺厉害的:UUID最少在3000+年内不会重复

 欢迎来大家QQ交流群一起学习:482713805

上一篇:MySQL 主键使用数字还是uuid查询快


下一篇:用户登录密码操作