溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql8.x中insert?ignore的性能問(wèn)題怎么解決

發(fā)布時(shí)間:2022-08-25 14:47:24 來(lái)源:億速云 閱讀:334 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“mysql8.x中insert ignore的性能問(wèn)題怎么解決”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“mysql8.x中insert ignore的性能問(wèn)題怎么解決”吧!

mysql 8.x中insert ignore性能問(wèn)題

mysql中replace into效率很差,多進(jìn)程并發(fā)一下就會(huì)鎖表,所以應(yīng)該用on duplicate 來(lái)做更新,這是眾所周知的了。沒(méi)想到insert ignore也有性能坑,記錄下遇到的問(wèn)題。

為了往一張表中插入初始化數(shù)據(jù),我開(kāi)了10個(gè)進(jìn)程并發(fā)向數(shù)據(jù)庫(kù)中使用insert ignore插入數(shù)據(jù),每條insert ignore語(yǔ)句包含7行數(shù)據(jù)。沒(méi)想到上線開(kāi)始跑腳本以后數(shù)據(jù)庫(kù)出現(xiàn)不少鎖表。根據(jù)innodb status log來(lái)看,鎖住的是表的自增id主鍵。

調(diào)試了半天之后發(fā)現(xiàn),原來(lái)是insert ignore的時(shí)候會(huì)對(duì)插入的每一行數(shù)據(jù)取S鎖做unique id的檢測(cè),同時(shí)會(huì)對(duì)主鍵的自增id字段加寫意向鎖(insert intension),在unique key較為復(fù)雜的時(shí)候,檢測(cè)unique key的時(shí)候會(huì)一直占用主鍵的插入意向鎖,其他insert ignore也想給主鍵id加插入意向鎖,導(dǎo)致死鎖。

以上情況是在mysql 8.x中發(fā)現(xiàn)的,以前用低版本的mysql似乎沒(méi)遇到過(guò)相關(guān)問(wèn)題,所以不清楚低版本mysql的insert ignore是否有坑,但是8.x的版本最好insert ignore不要插入多行數(shù)據(jù),尤其是unique key比較復(fù)雜的時(shí)候(有三四個(gè)字段共同組成)

mysql insert ignore()函數(shù)

INSERT IGNORE語(yǔ)句

當(dāng)您使用該INSERT語(yǔ)句向一個(gè)表中添加多行時(shí),如果在處理過(guò)程中發(fā)生錯(cuò)誤,則MySQL終止該語(yǔ)句并返回錯(cuò)誤。結(jié)果,沒(méi)有行插入到表中。

但是,如果使用該insert ignore語(yǔ)句,則會(huì)忽略包含導(dǎo)致錯(cuò)誤的無(wú)效數(shù)據(jù)的行,并將具有有效數(shù)據(jù)的行插入表中。

insert ignore into actor values (3,'ED','CHASE','2006-02-15 12:34:33')

感謝各位的閱讀,以上就是“mysql8.x中insert ignore的性能問(wèn)題怎么解決”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)mysql8.x中insert ignore的性能問(wèn)題怎么解決這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI