1. 程式人生 > >性能測試四十:Mysql存儲過程造數據

性能測試四十:Mysql存儲過程造數據

大量數據 奇數 導入 n) 執行 支持 業務 關系 隨機生成

性能測試是基於大量數據的,而進行性能測試之前肯定沒那麽多數據,所以就要自己準備數據

數據構造方法:

1.業務接口
  -- 適合數據表關系復雜
  -- 優點:數據完整性比較好
2.存儲過程
  -- 適合表數量少,簡單
  -- 優點:速度最快
3.腳本導入
  -- 適合數據邏輯復雜
  -- 自由度比較高
4.數據量級
  --測試數據
  --基礎數據

啟動並用工具連接mysql,這裏的新建函數,所建的函數,即為存儲過程

也可以在命令行mysql -u root -p 登錄後輸入存儲過程的sql運行,但是這就是純命令行了

技術分享圖片

技術分享圖片

執行truncate teacher清空表,再使用存儲過程造數據

技術分享圖片

技術分享圖片

造數據:選過程

技術分享圖片

技術分享圖片

表裏的字段:card_no, name, sex, age, course, created, modified

要造的數據的條件:插入10000 條數據,其中:card_no, name,age,均不重復,

要用到的函數:

DECLARE i INT DEFAULT 0; --定義一個變量i,給個默認值:0,也可以不給默認值(把DEFAULT 0去掉即可)

循環10000次:

  WHILE i<10001 DO
    sql語句;

    SET i = i+1; --mysql存儲過程中,變量自增只支持這個格式,不支持i++

  END WHILE;

NOW():當前時間

ONCAT(str1,str2,...):拼接函數,把str1、str2、···拼接起來

技術分享圖片

rand() :隨機生成一個0--1之間的小數

技術分享圖片

取整:

round() 遵循四舍五入把原值轉化為指定小數位數,如:round(1.45,0) = 1;round(1.55,1)=1.6
floor()向下取整 如:floor(1.45,0)= 1;floor(1.55,0) = 1
ceiling()向上取整 如:ceiling(1.45,0) = 2;ceiling(1.55,0)=2
age:這裏只需要取個100以下的整數就行了,所以:FLOOR(RAND()*100)

-- 取n--m
FLOOR(RAND()*(m-n)+n);

技術分享圖片

存儲過程語句:

BEGIN
  DECLARE i INT DEFAULT 0;-- 定義一個變量i,給個默認值:0,也可以不給默認值(把DEFAULT 0去掉即可)
  DECLARE p_sex VARCHAR(4);
  DECLARE p_course VARCHAR(4);

  WHILE i<10001 DO

    if i%2=0 THEN
      SET p_sex = ‘M‘; -- i為偶數時,性別為男
      SET p_course = ‘Eng‘; -- i為偶數時,課程為英語
    ELSE
      SET p_sex = ‘W‘; -- i為奇數時,性別為女
      SET p_course = ‘Math‘; -- i為奇數時,課程為數學
    END IF;
    -- card_no = 1000+i
    -- name = test_i
    -- sex = p_sex
    -- age = FLOOR(RAND()*100) 取個100以下的整數
    -- course = p_course
    INSERT INTO teacher (card_no, name, sex, age, course, created, modified) VALUES (10000+i,CONCAT(‘test_‘,i),p_sex,FLOOR(RAND()*100),p_course, NOW(), NOW());
    SET i = i+1; -- mysql存儲過程中,變量自增只支持這個格式,不支持i++
  END WHILE;
END

保存 點運行:

技術分享圖片

技術分享圖片

稍等一會即可

技術分享圖片

技術分享圖片

存儲過程造數據非常方便,應用也很廣泛,但是不適合邏輯很復雜的數據結構,遇到不知道怎麽實現時,網上都能找到

性能測試四十:Mysql存儲過程造數據