如何在MySQL數(shù)據(jù)庫中優(yōu)化insert的性能?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
MySQL的 insert 語句語法,關(guān)于mysql 優(yōu)化 insert 性能 的相關(guān)介紹。
insert into `table`(`field1`,`field2`) values('value1','value2');
提高insert 性能的方法
1.一條sql語句插入多條數(shù)據(jù)
INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0); INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_1', 'content_1', 1);
可以寫成
INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0), ('userid_1', 'content_1', 1);
2.使用事務(wù)
START TRANSACTION; INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0); INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_1', 'content_1', 1); ... COMMIT;
注意
1.sql語句長度有限制,合并sql語句時要注意。長度限制可以通過max_allowed_packet配置項修改,默認(rèn)為1M。
2.事務(wù)太大會影響執(zhí)行效率,mysql有innodb_log_buffer_size配置項,超過這個值會使用磁盤數(shù)據(jù),影響執(zhí)行效率。
關(guān)于事務(wù)的配置項說明:
innodb_buffer_pool_size
如 果用Innodb,那么這是一個重要變量。相對于MyISAM來說,Innodb對于buffer size更敏感。MySIAM可能對于大數(shù)據(jù)量使用默認(rèn)的key_buffer_size也還好,但I(xiàn)nnodb在大數(shù)據(jù)量時用默認(rèn)值就感覺在爬了。 Innodb的緩沖池會緩存數(shù)據(jù)和索引,所以不需要給系統(tǒng)的緩存留空間,如果只用Innodb,可以把這個值設(shè)為內(nèi)存的70%-80%。和 key_buffer相同,如果數(shù)據(jù)量比較小也不怎么增加,那么不要把這個值設(shè)太高也可以提高內(nèi)存的使用率。
innodb_additional_pool_size
這個的效果不是很明顯,至少是當(dāng)操作系統(tǒng)能合理分配內(nèi)存時。但你可能仍需要設(shè)成20M或更多一點以看Innodb會分配多少內(nèi)存做其他用途。
innodb_log_file_size
對于寫很多尤其是大數(shù)據(jù)量時非常重要。要注意,大的文件提供更高的性能,但數(shù)據(jù)庫恢復(fù)時會用更多的時間。我一般用64M-512M,具體取決于服務(wù)器的空間。
innodb_log_buffer_size
默認(rèn)值對于多數(shù)中等寫操作和事務(wù)短的運用都是可以的。如 果經(jīng)常做更新或者使用了很多blob數(shù)據(jù),應(yīng)該增大這個值。但太大了也是浪費內(nèi)存,因為1秒鐘總會 flush(這個詞的中文怎么說呢?)一次,所以不需要設(shè)到超過1秒的需求。8M-16M一般應(yīng)該夠了。小的運用可以設(shè)更小一點。
innodb_flush_log_at_trx_commit
抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了調(diào)整這個值。默認(rèn)值1的意思是每一次事務(wù)提交或事務(wù)外的指令都需要把日志寫入(flush)硬盤,這是很費時的。特別是使用電 池供電緩存(Battery backed up cache)時。設(shè)成2對于很多運用,特別是從MyISAM表轉(zhuǎn)過來的是可以的,它的意思是不寫入硬盤而是寫入系統(tǒng)緩存。日志仍然會每秒flush到硬 盤,所以你一般不會丟失超過1-2秒的更新。設(shè)成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務(wù)的數(shù)據(jù)。而值2只會在整個操作系統(tǒng) 掛了時才可能丟數(shù)據(jù)。
看完上述內(nèi)容,你們掌握如何在MySQL數(shù)據(jù)庫中優(yōu)化insert的性能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道,感謝各位的閱讀!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
分享題目:如何在MySQL數(shù)據(jù)庫中優(yōu)化insert的性能-創(chuàng)新互聯(lián)
本文路徑:http://aaarwkj.com/article18/dspggp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、外貿(mào)網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、小程序開發(fā)、標(biāo)簽優(yōu)化、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)