zoukankan      html  css  js  c++  java
  • 利用存储过程千万百万数据

    从上述结果中可以看出,利用上面的存储过程添加100万条随机用户数据是非常耗时的,用了几乎一个小时的时间。下面是优化后的存储过程:

     1 DROP PROCEDURE IF EXISTS add_user_optimizition;  
     2 DELIMITER //
     3     create PROCEDURE add_user_optimizition(in num INT)
     4     BEGIN
     5         DECLARE rowid INT DEFAULT 0;
     6         DECLARE firstname CHAR(1);
     7         DECLARE name1 CHAR(1);
     8         DECLARE name2 CHAR(1);
     9         DECLARE lastname VARCHAR(3) DEFAULT '';
    10         DECLARE sex CHAR(1);
    11         DECLARE score CHAR(2);
    12         SET @exedata = "";
    13         WHILE rowid < num DO
    14             SET firstname = SUBSTRING('赵钱孙李周吴郑王林杨柳刘孙陈江阮侯邹高彭徐',FLOOR(1+21*RAND()),1); 
    15             SET name1 = SUBSTRING('一二三四五六七八九十甲乙丙丁静景京晶名明铭敏闵民军君俊骏天田甜兲恬益依成城诚立莉力黎励',ROUND(1+43*RAND()),1); 
    16             SET name2 = SUBSTRING('一二三四五六七八九十甲乙丙丁静景京晶名明铭敏闵民军君俊骏天田甜兲恬益依成城诚立莉力黎励',ROUND(1+43*RAND()),1); 
    17             SET sex=FLOOR(0 + (RAND() * 2));
    18             SET score= FLOOR(40 + (RAND() *60));
    19             SET rowid = rowid + 1;
    20             IF ROUND(RAND())=0 THEN 
    21             SET lastname =name1;
    22             END IF;
    23             IF ROUND(RAND())=1 THEN
    24             SET lastname = CONCAT(name1,name2);
    25             END IF;
    26             IF length(@exedata)>0 THEN
    27             SET @exedata = CONCAT(@exedata,',');
    28             END IF;
    29             SET @exedata=concat(@exedata,"('",firstname,"','",lastname,"','",sex,"','",score,"','",rowid,"')");
    30             IF rowid%1000=0
    31             THEN 
    32                 SET @exesql =concat("insert into user_test(first_name,last_name,sex,score,copy_id) values ", @exedata);
    33                 prepare stmt from @exesql;
    34                 execute stmt;
    35                 DEALLOCATE prepare stmt;
    36                 SET @exedata = "";
    37             END IF;
    38         END WHILE;
    39         IF length(@exedata)>0 
    40         THEN
    41             SET @exesql =concat("insert into user_test(first_name,last_name,sex,score,copy_id) values ", @exedata);
    42             prepare stmt from @exesql;
    43             execute stmt;
    44             DEALLOCATE prepare stmt;
    45         END IF; 
    46     END //
    47 DELIMITER ;

    创建一个与上述用户表同样的表结构如下:

    1 CREATE TABLE user_test(
    2   id INT NOT NULL AUTO_INCREMENT,
    3   first_name VARCHAR(10) NOT NULL,
    4   last_name VARCHAR(10) NOT NULL,
    5   sex VARCHAR(5) NOT NULL,
    6   score INT NOT NULL,
    7   copy_id INT NOT NULL,
    8   PRIMARY KEY (`id`)
    9 );

    执行优化后的存储过程:

     call add_user_optimizition(10000001); 

  • 相关阅读:
    Unix命令大全
    vs2008 与 IE8出现的兼容性问题
    Java 创建文件、文件夹以及临时文件
    如何修改Wamp中mysql默认空密码
    PAT 乙级真题 1003.数素数
    Tags support in htmlText flash as3
    DelphiXE4 FireMonkey 试玩记录,开发IOS应用 还是移植
    10 Great iphone App Review sites to Promote your Apps!
    HTML tags in textfield
    Delphi XE4 IOS 开发, "No eligible applications were found“
  • 原文地址:https://www.cnblogs.com/BrokenHeart/p/10616151.html
Copyright © 2011-2022 走看看