Mysql 五 千萬級資料批量插入

2021-10-21 13:39:39 字數 3443 閱讀 3039

建表語句:

create

table

ifnot

exists

`dept`

(`id`

intunsigned

primary

keyauto_increment

,`deptno`

mediumint

unsigned

notnull

default0,

`dname`

varchar(20

)not

null

default"",

`loc`

varchar(13

)not

null

default"")

engine

=innodb

default

charset

=gbk;

create

table

ifnot

exists

`emp`

(`id`

intunsigned

primary

keyauto_increment

,`empno`

mediumint

unsigned

notnull

default0,

`ename`

varchar(20

)not

null

default"",

`job`

varchar(9

)not

null

default"",

`mgr`

mediumint

unsigned

notnull

default0,

`hiredata`

date

notnull

,`sal`

decimal(7

,2)not

null

,`comm`

decimal(7

,2)not

null

,`deptno`

mediumint

unsigned

notnull

default0)

engine

=innodb

default

charset

=gbk;

# 生成長度為n的隨機字串

delimiter $$ # 作用是定義換行符為$$,因為函式編寫中需要換行用到 ;

create

function rand_string(n int

)returns

varchar

(255

)begin

# 宣告變數

declare chars_str varchar

(100

)default

'abcdefghijklmnopqrstuvwxyz'

;declare return_str varchar

(255

)default'';

declare i int

default0;

while i

set return_str = concat(return_str,substring(chars_str,floor(

1+rand()*

25),1

));set i = i+1;

endwhile

;return return_str;

end $$

# 隨機生成乙個整形數字

delimiter $$

create

function rand_num(

)returns

int(6)

begin

declare i int

default0;

set i = floor(rand()*

10+100)

;return i;

end $$

# 往emp 表中插入 id從start開始的 max_num 條資料

delimiter $$

create

procedure insert_emp(

instart

int(10)

,in max_num int(10

))begin

declare i int

default0;

set autocommit=0;

# 關閉自動提交!!!

repeat

set i = i+1;

# 儲存過程中呼叫了之前定義的函式 rand_num()、rand_string(int n)

insert

into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)

values((

start

+i),rand_string(6)

,'saleman'

,0001

,curdate(),

2000

,400

,rand_num())

; until i

endrepeat

;commit

;# 提交事務

end $$

# 往dept表中插入....

delimiter $$

create

procedure insert_dept(

instart

int(10)

,in max_num int(10

))begin

declare i int

default0;

set autocommit =0;

repeat

set i = i+1;

insert

into dept(deptno,dname,loc)

values((

start

+i),rand_string(10)

,rand_string(10)

);until i=max_num

endrepeat

;commit

;end $$

插入40w條資料:

此時使用40w條資料測試索引查詢的優勢就很明確了:

MySQL批量插入千萬級別的資料

使用mysql插入千萬級別的資料,如果使用單條的插入,在時間效能上肯定會讓人懷疑人生。這裡為了學習,收集了網上幾個對於mysql插入大資料量的部落格,以便自己後面的學習。1 mysql批量插入資料庫實現語句效能分析 2 mysql千萬級別資料批量插入只需簡單三步 3 關於批量插入資料之我見 100萬...

MySQL使用儲存過程插入千萬級資料如何提公升效率?

mysql測試任務 使用儲存過程,往表中插入千萬級資料,根據索引優化速度 1.使用索引查詢 2.不使用索引查 3.比較兩者查詢速度的差異 1.建立索引測試表 drop table if exists index test create table index test id bigint 20 pr...

mysql千萬級資料查詢

1.mysql的資料查詢,大小欄位要分開,這個還是有必要的,除非一點就是你查詢的都是索引內容而不是表內容,比如只查詢id等等 2.查詢速度和索引有很大關係也就是索引的大小直接影響你的查詢效果,但是查詢條件一定要建立索引,這點上注意的是索引字段不能太多,太多索引檔案就會很大那樣搜尋只能變慢 3.查詢指...