MySQL 如何準備一億條記錄的表來測試

2021-09-25 05:51:30 字數 4567 閱讀 6645

我線上有上億條記錄的表,但是很多網上朋友都沒有,那麼我這裡就實踐了一條辦法,來實現自己構造一億條資料記錄的表。實現思路就是先建一張通用的20個字段左右的使用者表,然後寫乙個儲存過程,不停的往這個表裡面寫資料,while迴圈寫上一億次,這樣就形成了一張一億條記錄的表出來。

use test;

create table `uc_user` (

`id` bigint (20),

`user_name` varchar (400),

`user_pwd` varchar (800),

`birthday` datetime ,

`name` varchar (800),

`user_icon` varchar (2000),

`***` char (4),

`nickname` varchar (800),

`stat` varchar (40),

`user_mall` bigint (20),

`last_login_date` datetime ,

`last_login_ip` varchar (400),

`src_open_user_id` bigint (20),

`email` varchar (800),

`mobile` varchar (200),

`is_del` char (4),

`is_email_confirmed` varchar (4),

`is_phone_confirmed` varchar (4),

`creater` bigint (20),

`create_date` datetime ,

`update_date` datetime ,

`pwd_intensity` varchar (4),

`mobile_tgc` varchar (256),

`mac` varchar (256),

`source` varchar (4),

`activate` varchar (4),

`activate_type` varchar (4),

`is_life` varchar (4)

) engine=innodb;

儲存過程內容:

delimiter $$

use `test`$$

drop procedure if exists test.`pro_test_data`$$

create procedure test.`pro_test_data`( pos_begin int,pos_end int)

begin

declare i int;

set i=pos_begin;

while  i>=pos_begin && i<= pos_end do

insert into test.`uc_user` (`id`, `user_name`, `user_pwd`, `birthday`, `name`, `user_icon`, `***`, `nickname`, `stat`, `user_mall`, `last_login_date`, `last_login_ip`, `src_open_user_id`, `email`, `mobile`, `is_del`, `is_email_confirmed`, `is_phone_confirmed`, `creater`, `create_date`, `update_date`, `pwd_intensity`, `mobile_tgc`, `mac`, `source`, `activate`, `activate_type`, `is_life`) values(i,'admin','1ba613b3676a4a06d6204b407856f374',now(),'超管','group1/m00/03/bc/wki0d1qkfawahhewaaaoj58qocg271.jpg','1','admin2014','01','1',now(),'192.168.121.103',null,'','10099990001','0','1','0',null,null,null,'1','e5f10caa4ebb44c4b23726cbbd3ac413','1-3','0','2','2','1');

set i=i + 1;

end while;

end$$

delimiter ;

在sql命令視窗介面執行過程如下:

mysql> delimiter $$

mysql> use `test`$$

database changed

mysql> drop procedure if exists test.`pro_test_data`$$

query ok, 0 rows affected (0.00 sec)

mysql> create procedure test.`pro_test_data`( pos_begin int,pos_end int)

-> begin

-> declare i int;

-> set i=pos_begin;

-> while  i>=pos_begin && i<= pos_end do

display all 1421 possibilities? (y or n)

-> insert into test.`uc_user` (`id`, `user_name`, `user_pwd`, `birthday`, `name`, `user_icon`, `***`, `nickname`, `stat`, `user_mall`, `last_login_date`, `last_login_ip`, `src_open_user_id`, `email`, `mobile`, `is_del`, `is_email_confirmed`, `is_phone_confirmed`, `creater`, `create_date`, `update_date`, `pwd_intensity`, `mobile_tgc`, `mac`, `source`, `activate`, `activate_type`, `is_life`) values(i,'admin','1ba613b3676a4a06d6204b407856f374',now(),'超管','group1/m00/03/bc/wki0d1qkfawahhewaaaoj58qocg271.jpg','1','admin2014','01','1',now(),'192.168.121.103',null,'','10099990001','0','1','0',null,null,null,'1','e5f10caa4ebb44c4b23726cbbd3ac413','1-3','0','2','2','1');

display all 1421 possibilities? (y or n)

-> set i=i + 1;

-> end while;

-> end$$

query ok, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql>

開始啟用儲存過程錄入一億條資料進表,命令call test.pro_test_data(0,100000000);,這裡時間會比較長一些,畢竟是一億條記錄。

mysql> call test.pro_test_data(0,100000000);

query ok, 1 row affected (2 hours 26 min 56.32 sec)  # 看到用時是2 hours 26 min 56.32 sec,2個半小時。

mysql> select count(1) from test.`uc_user`;

| count(1)  |

| 100000001 |

1 row in set (3 min 0.14 sec)

mysql>

因為錄入了一億條記錄,所以會產生大量的binlog日誌,我們需要清除這些binlog記錄,免得佔據磁碟空間:

mysql> show master status;

| file             | position | binlog_do_db | binlog_ignore_db                      | executed_gtid_set |

| mysql-bin.007143 |  4589266 |              | information_schema,performance_schema |                   |

1 row in set (0.01 sec)

mysql> purge master logs to "mysql-bin.0007143";

error 1373 (hy000): target log not found in binlog index

mysql> purge master logs to "mysql-bin.007143";

query ok, 0 rows affected (5.44 sec)

mysql>

Linux如何調整history記錄的條數

linux如何調整history記錄的條數 標題 斜體樣式 我們大家在玩linux時經常會用到history這個命令,這個命令預設可以儲存的命令數是1000,1000對於我們linux玩家來說實在是太少了,那麼我們如何調整history的儲存條數呢?1.查詢profile檔案 history命令最大...

mysql獲取第n條記錄

注 利用limit的這個引數使用的特點,可以很方便地在資料庫層面上實現分頁。求第n頁的結果集 select from table name where id 0 limit 第n頁的起始下標,頁大小 注意 limit的最小下標為0。第n頁的起始下標為 n 1 頁大小。頁大小 一頁有多少條記錄。mys...

mysql 隨機選擇一條記錄

mysql 快速隨機選取一條記錄的思考 2010年07月14日 星期三 10 43 標籤 mysql 隨機 分類 mysql 2010 03 04 12 23 本文討論的是如何從mysql乙個資料表中提取一條隨機的效率,同時要保證效率最高。方法一 這是最原始最直觀的語法,如下 select from...