當前位置:首頁 » 編程語言 » mysql導入sql太慢
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

mysql導入sql太慢

發布時間: 2022-04-23 02:45:38

『壹』 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用什麼方式才可以快速導入*.sql文件

MySQL的客戶端連接工具一般都要導入sql的功能,比如navicat和SQLyog,效率很高。

『叄』 在MySQL 中,哪些原因導致一條簡單的 SQL 插入耗時很長

Count: 6 Time=25.33s (152s) Lock=0.00s (0s) Rows=0.0 (0), xxx[xxx]@xxx
INSERT INTO tablename(f_uid,uid,create_time) VALUES (N,N,N)
分析原因如下:
1.不可能是鎖等待,因為記錄的Lock時間為0;
2.若是InnoDB引擎,則跟主鍵為啥存在一定關系,但是應該不是特別大,從你的SQL語句看;
3.資料庫主機的負載過高,導致處理不過,是最可能的原因;

『肆』 求解navicat for mysql 對1個G的sql文件導入超級慢怎麼處理在線等!急急急!求指點

在my.ini最底下添加個KV對:

max_allowed_packet=100000M
然後重啟Mysql,就可以按普通的方法導了,可以用mysql命令,也可以用navicat for mysql(我一般用這個)
不知道能不能寫成100G,沒試過,LZ試下吧。

如果改不了my.ini可以試試這個方法,我沒試過,因為我一直是改my.ini的,相信你有這么大的資料庫應該不是用的虛擬主機吧:
set global max_allowed_packet = 100*1024*1024*1024;
然後用:
show VARIABLES like '%max_allowed_packet%';
查看一下是否修改成功,這個應該就不用重啟mysql了,重啟反而失效了。

『伍』 mysql資料庫插入數據很慢,咋回事

如果原表很大,插入數據會非常慢,建議插入到臨時表,然後用一個語句(INSERT
INTO
XXX
SELECT
*
FTOM
TMPXXX)把數據插入,這樣速度會快一點,如果想更快,需要減少不必要的索引,如果大批量的插入,可以插入前刪除索引,插入後重新建立。

『陸』 怎麼提高mysql執行sql導入速度

linux如下設置內存檔:mount -t ramfs none /ram默認使用內存一半如果內存不夠大,系統有多個硬碟,則把mysql應用程序和data目錄分開到不同硬碟上。2、mysql的表設置為myiasm,比同等條件下的innodb能快20倍以上3、導入完成以後才創建資料庫索引4、導入完成以後根據需要轉換為其他engine,比如innodb5、多條數據插入一個表,可以使用多記錄方式:insert into tablename values('xxx','xxx'),('yyy','yyy')...;6、如果多個mysql執行導入,可以使用delayedinsert delayed into tablename values('sss','ssss');7、大文件sql文件可以用split分成多份再導8、同等條件下,redhat比ubuntu強很多(幾乎肯定)

『柒』 mysql如何快速導入外部1.2G的sql文件用source很慢,都幾個小時卡著

你打開那個.sql文件看過沒有,不僅僅只有數據,還包含表結構。在導入的時候先是創建表,然後再插入數據的。

『捌』 為什麼我的mysql導入sql文件很慢,3000多條的insert語句都要5分鍾,我朋友電腦卻不超

硬碟讀寫速度會影響輸入庫的寫入速度的,另外看看你的mysql是不是加了好多索引,或者是不是遠端資料庫。。。硬碟,cpu,內存,網路和mysql配置都會對執行速度產生影響的

『玖』 mysql導入sql文件命令導入資料庫快不快

其實導入的方法很簡單,可以採用工具導入和只用mysql命令界面導入兩種方式,mysql的資料庫圖形界面工具是很多的,用起來也比較方便。
工具/原料
navicat
for
mysql
mysql命令行界面
sql腳本
方法一:
1、首先使用mysql提供的命令行界面來導入資料庫,確保電腦中安裝了mysql資料庫,可以通過命令行來確認是否安裝了mysql資料庫,當然,第一步是打開mysql的資料庫服務,使用命令行來打開:
2、啟動mysql後,找到需要用到的腳本文件,也就是資料庫文件,當然,首先得建立一個資料庫,這樣才可以導入腳本,如下圖所示:
3、在將腳本拷到本地磁碟的根目錄,這樣方便進入找到腳本,這里以d盤來說明,使用test.sql:接著來到命令行,使用source
d:/test.sql;來導入資料庫,先進入mysql。
4、首先要在資料庫中建立好資料庫,然後導入腳本,所以先建立一個資料庫哦,不要腳本是不知道要往哪個資料庫中導入腳本的。
5、然後就可以輸入導入.sql文件命令:
mysql>
use
資料庫名;
mysql>
source
d:/test.sql;
6、看到上面的畫面,說明mysql資料庫已經導入成功了。
方法二:使用navicat
for
mysql圖形界面來導入資料庫,使用圖形界面導入資料庫的步驟很簡單
1、在圖形界面中建立好資料庫之後,使用導入腳本的功能來導入資料庫
2、點擊選擇腳本,選擇d盤的test.sql腳本,然後設置資料庫字元格式
3、接著點擊開始運行腳本就行了,腳本開始導入了哦!導入完成之後就會出現成功的提示
4、然後先關閉資料庫,再打開資料庫就可以看到建立好的資料庫的表了。