mysql導入xml文件太慢的簡單介紹

本文目錄一覽:

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強很多(幾乎肯定)

load file 是一種,換引擎也是一種,還有一種很方便的,直接copy表,然後paste過去

原創文章,作者:VURMS,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/325472.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VURMS的頭像VURMS
上一篇 2025-01-13 13:24
下一篇 2025-01-13 13:24

相關推薦

發表回復

登錄後才能評論