INSERT語句的速度

2021-06-21 11:45:09 字數 1585 閱讀 1982

《mysql_5.5中文參考手冊》

文件insert語句的速度

插入乙個記錄需要的時間由下列因素組成,其中的數字表示大約比例:

這不考慮開啟表的初始化開銷,每個併發執行的查詢開啟。

表的大小以logn(b樹)的速度減慢索引的插入。

加快插入的一些方法:

如果同時從同乙個客戶端插入很多行,使用含多個value的insert語句同時插入幾行。這比使用單行insert語句快(在某些情況下快幾倍)。如果你正向乙個非空表新增資料,可以調節bulk_insert_buffer_size變數,使資料插入更快。參見5.3.3節,「伺服器系統變數」。

如果你從不同的客戶端插入很多行,能通過insert delayed語句加快速度。參見13.2.4節,「insert語法」。

用myisam,如果在表中沒有刪除的行,能在select語句正在執行的同時插入行。

當從乙個文字檔案裝載乙個表時,使用load data infile。這通常比使用很多insert語句快20倍。參見13.2.5節,「load data infile語法」

當表有很多索引時,有可能要多做些工作使得load data infile更快些。使用下列過程:

a)有選擇地用create table 建立表

b)執行flush tables 語句或命令mysqladmin flush-tables

c)使用myisamchk -keys-used=0 -rq /path/to/db/tbl_name。這將從表中取消所有索引的使用。

d)用load data infile 把資料插入到表中,因為不更新任何索引,因此很快。

e)如果只想在以後讀取表,使用myisampacky壓縮它。參見15.1.3.3節,「壓縮表特性」。

f)用myisamchk -r -q /path/to/db/tbl_name重新建立索引。這將在寫入磁碟前在記憶體中建立索引樹,並且它更快,因為避免了大量磁碟搜尋。結果索引樹也被完美地平衡。

g)執行flush tables語句或mysqladmin flush-tables命令

鎖定表可以加速用多個語句執行的insert操作:

這樣效能會提高,因為索引快取區僅在所有insert 語句完成後重新整理磁碟上一次。一般有多少insert語句即有多少索引快取區重新整理。如果能用乙個語句插入所有行,就不需要鎖定。

對於事務表,應使用begin和commit代替lock tables來加快 插入。

鎖定也將降低多連線測試的整體時間,儘管因為它們等候鎖定最大等待時間將上公升。例如:

connection 1 does 1000 inserts

connections 2,3,and 4 do 1 insert

connect 5 does 1000 inserts

如果不使用鎖定,2,3和4將在1和5前完成。如果使用鎖定,2,3和4將可能不在1和5前完成,但是整體時間應該快大約40%

insert裝載資料比load date infile要慢得多,即使是使用上述的策略

為了對load date infile 和insert 在myisam表得到更快的速度,通過增加key_buffer_size系統變數來擴大鍵高速緩衝區。參見7.5.2節,「調節伺服器引數」。

insert語句詳解

insert 插入語句 新增 insert into 表名 欄位名1,欄位2,欄位3 values 值1 值2 值3 insert into grade gradename values 大四 由於主鍵自增我們可以省略 如果不寫表的字段,他就會一一匹配 insert into grade value...

sqlplus匯出insert語句

先寫出來我的乙個例子 sethead off set feedback off set term off set line 400 set pagesize 10000 spool data.sql select insert into tablename col1,col2,col3 values...

SQL 十七 INSERT語句

sql表將資料按行儲存,一行接一行。insert into語句用於向資料庫中的表新增新的資料行。sql insert into語法如下 insert into table name values value1,value2,value3,確保值的順序與表中的列的順序相同。考慮以下employees表...