本文目錄一覽:
- 1、mysql 如何提高批量導入的速度
- 2、mysql CMD source導入超大文件速度慢
- 3、如何將xml格式文件導入mysql中
- 4、為什麼我的mysql導入sql文件很慢,3000多條的insert語句都要5分鐘,我朋友電腦卻不超
- 5、怎麼提高Mysql執行sql導入的速度
- 6、Navicat for MySQL導入數據庫時特別慢,怎麼樣能提高速度?
mysql 如何提高批量導入的速度
這個是需要做一些設置的。主要設置 rewriteBatchedStatements參數。原理如下:
MySQL Jdbc驅動在默認情況下會無視executeBatch()語句,把我們期望批量執行的一組sql語句拆散,一條一條地發給MySQL數據庫,直接造成較低的性能。
只有把rewriteBatchedStatements參數置為true, 驅動才會幫你批量執行SQL (jdbc:mysql://ip:port/db?rewriteBatchedStatements=true)。不過,驅動具體是怎麼樣批量執行的? 你是不是需要看一下內幕,才敢放心地使用這個選項? 下文會給出答案。
另外,有人說rewriteBatchedStatements只對INSERT有效,有人說它對UPDATE/DELETE也有效。為此我做了一些實驗(詳見下文),結論是: 這個選項對INSERT/UPDATE/DELETE都有效,只不過對INSERT它為會預先重排一下SQL語句。
註:本文使用的mysql驅動版本是5.1.12
實驗記錄:未打開rewriteBatchedStatements時
未打開rewriteBatchedStatements時,根據wireshark嗅探出的mysql報文可以看出,
batchDelete(10條記錄) = 發送10次delete 請求
batchUpdate(10條記錄) = 發送10次update 請求
batchInsert(10條記錄) = 發送10次insert 請求
也就是說,batchXXX()的確不起作用
實驗記錄:打開了rewriteBatchedStatements後
打開rewriteBatchedStatements後,根據wireshark嗅探出的mysql報文可以看出
batchDelete(10條記錄) = 發送一次請求,內容為”delete from t where id = 1; delete from t where id = 2; delete from t where id = 3; ….”
batchUpdate(10條記錄) = 發送一次請求,內容為”update t set … where id = 1; update t set … where id = 2; update t set … where id = 3 …”
batchInsert(10條記錄) = 發送一次請求,內容為”insert into t (…) values (…) , (…), (…)”
對delete和update,驅動所做的事就是把多條sql語句累積起來再一次性發出去;而對於insert,驅動則會把多條sql語句重寫成一條風格很酷的sql語句,然後再發出去。 官方文檔說,這種insert寫法可以提高性能(”This is considerably faster (many times faster in some cases) than using separate single-row INSERT statements”)
一個注意事項
需要注意的是,即使rewriteBatchedStatements=true, batchDelete()和batchUpdate()也不一定會走批量: 當batchSize = 3時,驅動會寧願一條一條地執行SQL。所以,如果你想驗證rewriteBatchedStatements在你的系統里是否已經生效,記得要使用較大的batch.
更多細節看這個帖子:
blog.yemou.net/article/query/info/tytfjhfascvhzxcyt397
mysql CMD source導入超大文件速度慢
下面收集了兩種解決辦法,一種是把數據庫分文件導出然後再導入,另一種是修改my.ini配置文件。
導入1G的數據,但是在怎麼都導入不了,用命令行就可以輕鬆搞定了。用mysql source命令可以導入比較大的文件。
代碼如下 複製代碼
mysqluse dbtest;
mysqlset names utf8;
mysqlsource D:/www/sql/back.sql;
通過source命令導入多個文件,可以新建一個sou.sql文件,裡面存放下面的命令
例如:
代碼如下 複製代碼
source d:/a1.sql;
source d:/a2.sql;
如何將xml格式文件導入mysql中
舉例說明如下
xml文件名為: text.xml
xml數據文件的結構如下:
node1
node2 name=”abc”123/node2
/node1
sql命令如下:
SET @xml = LOAD_FILE(‘text.xml’); — 要指定完整的文件位置
SELECT ExtractValue(@xml, ‘/node1/node2/@name’) as name,ExtractValue(@xml, ‘/node1/node2’) as data;
返回數據結果就是:
name | data
abc | 123
為什麼我的mysql導入sql文件很慢,3000多條的insert語句都要5分鐘,我朋友電腦卻不超
硬盤讀寫速度會影響輸入庫的寫入速度的,另外看看你的mysql是不是加了好多索引,或者是不是遠端數據庫。。。硬盤,cpu,內存,網絡和mysql配置都會對執行速度產生影響的
怎麼提高Mysql執行sql導入的速度
1、如果mysql的data數據很少,內存足夠大,可以把data防止到內存盤中。
linux如下設置內存盤:
mount -t ramfs none /ram
默認使用內存一半
如果內存不夠大,系統有多個硬盤,則把mysql應用程序和data目錄分開到不同硬盤上。
2、mysql的表設置為myiasm,比同等條件下的innodb能快20倍以上
3、導入完成以後才創建數據庫索引
4、導入完成以後根據需要轉換為其他engine,比如innodb
5、多條數據插入一個表,可以使用多記錄方式:
insert into tablename values(’xxx’,’xxx’),(’yyy’,’yyy’)…;
6、如果多個mysql執行導入,可以使用delayed
insert delayed into tablename values(’sss’,’ssss’);
7、大文件sql文件可以用split分成多份再導
8、同等條件下,redhat比ubuntu強很多(幾乎肯定)
Navicat for MySQL導入數據庫時特別慢,怎麼樣能提高速度?
load file 是一種,換引擎也是一種,還有一種很方便的,直接copy表,然後paste過去
原創文章,作者:VURMS,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/325472.html