为啥mysql的load这么快_mysql – 为什么’LOAD DATA INFILE’比普通的INSERT语句更快?...
LOAD DATA INFILE和擴展INSERT各有其獨特的優(yōu)勢.
LOAD DATA INFILE設計用于在單個操作中大量加載表格數(shù)據(jù)以及鈴聲和口哨聲,以執(zhí)行以下操作:
>跳過初始線
>跳過特定列
>轉換特定列
>加載特定列
>處理重復的關鍵問題
解析需要更少的開銷
另一方面,如果您只導入100行而不是1,000,000行,則擴展INSERT是明智的.
請注意,mysqldump是圍繞擴展INSERT設計的,以便隨著每個INSERT執(zhí)行數(shù)百或數(shù)千行的注入而攜帶表設計和數(shù)據(jù). LOAD DATA INFILE總是在模式和數(shù)據(jù)之間創(chuàng)建物理dichomoty.
從應用程序的角度來看,LOAD DATA INFILE對模式更改也比擴展INSERT更不敏感.
人們可以在使用LOAD DATA INFILE的好,壞和丑陋中來回走動.無論您使用哪種技術,都必須始終設置bulk_insert_buffer_size.為什么?
根據(jù)bulk_insert_buffer_size上的MySQL文檔:
MyISAM uses a special tree-like cache to make bulk inserts faster for
INSERT … SELECT, INSERT … VALUES (…), (…), …, and LOAD DATA
INFILE when adding data to nonempty tables. This variable limits the
size of the cache tree in bytes per thread. Setting it to 0 disables
this optimization. The default value is 8MB.
多年來,我看到客戶端沒有設置這個并留下8MB的客戶端.然后,當他們決定使用LOAD DATA INFILE或導入mysqldump時,他們可以感覺到錯誤.我通常建議將其設置為適中的256M.在某些情況下,512M.
一旦你有一個足夠大的批量INSERT緩沖區(qū),使用任何一種技術都是學術性的,歸結為個人選擇.對于按需批量插入100行的應用程序,請堅持使用擴展INSERT.
平心而論,說LOAD DATA INFILE比正常INSERT語句是一種加載語句更快,主要是因為沒有考慮配置.即使您使用正確的bulk_insert_buffer_size在LOAD DATA INFILE和擴展INSERT之間設置基準,解析每行時節(jié)省的納秒也只能產(chǎn)生名義上的結果,最好是有利于LOAD DATA INFILE.
繼續(xù)把它添加到my.cnf
[mysqld]
bulk_inset_buffer_size=256M
您也可以在啟動擴展INSERT之前為會話設置它
SET bulk_insert_buffer_size= 1024 * 1024 * 256;
更新2012-07-19 14:58美國東部時間
為了保持透視,批量插入緩沖區(qū)僅用于加載MyISAM表,而不是InnoDB.我寫了一篇關于批量加載InnoDB的最新文章:Mysql load from infile stuck waiting on hard drive
總結
以上是生活随笔為你收集整理的为啥mysql的load这么快_mysql – 为什么’LOAD DATA INFILE’比普通的INSERT语句更快?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql主从复制优化_MySql优化之
- 下一篇: 黄心红薯的功效与作用、禁忌和食用方法