zoukankan      html  css  js  c++  java
  • Mysql创建测试大量测试数据

    修改mysql配置

    max_heap_table_size=4000M
    innodb_flush_log_at_trx_commit=0
    sync_binlog=500

    创建测试数据库

     create database test_db charset=utf8;
     use test_db;
    

    创建数据表

    CREATE TABLE `test_innodb` (
        `id` INT (11) NOT NULL AUTO_INCREMENT,
        `user_id` VARCHAR (20) NOT NULL,
        `group_id` INT (11) NOT NULL,
        `create_time` datetime NOT NULL,
        PRIMARY KEY (`id`),
        KEY `index_user_id` (`user_id`) USING HASH
    ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
    

    创建随机字符串函数

    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 ;
    

    创建存储过程

    delimiter $$
    CREATE  PROCEDURE `insert_data`(IN n int)
    BEGIN  
      DECLARE i INT DEFAULT 1;
        WHILE (i <= n ) DO
          INSERT into test_innodb (user_id,group_id,create_time ) VALUEs (rand_string(20),FLOOR(RAND() * 100) ,now() );
                set i=i+1;
        END WHILE;
    END $$
    delimiter ;
    

    调用存储过程, 插入数据

    set @d=now();
    call insert_data(1000000);
    select timestampdiff(second,@d,now());

     ==============

    测试ON DUPLICATE KEY UPDATE

    delimiter $$
    CREATE  PROCEDURE `insert_update2_data`(IN n int)
    BEGIN  
      DECLARE i INT DEFAULT 1;
        WHILE (i <= n ) DO
          INSERT into test_innodb (id,user_id,group_id,create_time ) VALUES (FLOOR(RAND() * 100000),CONCAT('a#',rand_string(10)),FLOOR(RAND() * 100) ,now() )     ON DUPLICATE KEY UPDATE  user_id=CONCAT('u#',rand_string(10)), group_id=FLOOR(RAND() * 100),create_time=now() ;
                set i=i+1;
        END WHILE;
    END $$
    delimiter ;
    
    
    
    INSERT into test_innodb (id,user_id,group_id,create_time ) VALUES (FLOOR(RAND() * 100000),CONCAT('a#',rand_string(10)),FLOOR(RAND() * 100) ,now() )
    ON DUPLICATE KEY UPDATE  user_id=CONCAT('u#',rand_string(10)), group_id=FLOOR(RAND() * 100),create_time=now() ;
    
    
    INSERT into test_innodb (id,user_id,group_id,create_time ) VALUES (11100000,CONCAT('a#',rand_string(10)),FLOOR(RAND() * 100) ,now())
    INSERT into test_innodb (id,user_id,group_id,create_time ) VALUES (11100001,CONCAT('a#',rand_string(10)),FLOOR(RAND() * 100) ,now());
    
    
    
    select now();
    set @d=now();
    call insert_update2_data(10000);
    select timestampdiff(second,@d,now());
    select now();
    
    
    SELECT * FROM test_innodb T WHERE T.user_id like '_#%';
  • 相关阅读:
    寻找字符串中只出现一次的第一个字符
    【二叉树】已知二叉树前序序列和中序序列,重建唯一二叉树
    单向链表插入与删除
    【二叉树->链表】二叉树结构转双向线性链表结构(先序遍历)
    先序构建二叉树及先序遍历二叉树
    【Leetcode】寻找数串中连续最大整数和且最大长度的子串
    稀疏矩阵存储、转置、乘法运算
    面试编程题拾遗(06) --- 打印n对括号的全部有效组合
    面试编程题拾遗(05) --- 括号匹配检查
    做到这一点,你也可以成为优秀的程序员
  • 原文地址:https://www.cnblogs.com/linn/p/11083969.html
Copyright © 2011-2022 走看看