主頁 > 知識(shí)庫 > MySQL優(yōu)化insert性能的方法示例

MySQL優(yōu)化insert性能的方法示例

熱門標(biāo)簽:商家地圖標(biāo)注哪個(gè)好 外呼系統(tǒng)從哪買 遵義地圖標(biāo)注app 地圖標(biāo)注賺錢真假 深圳 合肥營(yíng)銷外呼系統(tǒng)收費(fèi) 陜西400電話如何申請(qǐng) 德惠市地圖標(biāo)注 承德電腦地圖標(biāo)注

MySQL性能優(yōu)化

MySQL性能優(yōu)化就是通過合理安排資源,調(diào)整系統(tǒng)參數(shù)使MySQL運(yùn)行更快、更節(jié)省資源。MySQL性能優(yōu)化包括查詢速度優(yōu)化、更新速度優(yōu)化、MySQL服務(wù)器優(yōu)化等。本篇博客將從查詢優(yōu)化、數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化、MySQL服務(wù)器優(yōu)化3個(gè)方面介紹。

MySQL數(shù)據(jù)庫優(yōu)化,一方面是找出系統(tǒng)瓶頸,提高M(jìn)ySQL數(shù)據(jù)庫整體性能;另一方面需要合理的結(jié)構(gòu)設(shè)計(jì)和參數(shù)調(diào)整,以提高用戶操作響應(yīng)速度;同時(shí)還要盡可能節(jié)省系統(tǒng)資源,以便系統(tǒng)可以提供更大負(fù)荷的服務(wù)。例如,通過優(yōu)化文件系統(tǒng),提高磁盤I\O的讀寫書讀;通過優(yōu)化操作系統(tǒng)調(diào)度策略,提高M(jìn)ySQL在高負(fù)荷下的負(fù)載能力;優(yōu)化表結(jié)構(gòu)、索引、查詢語句等使查詢響應(yīng)更快。

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語句長(zhǎng)度有限制,合并sql語句時(shí)要注意。長(zhǎng)度限制可以通過max_allowed_packet配置項(xiàng)修改,默認(rèn)為1M。

2.事務(wù)太大會(huì)影響執(zhí)行效率,mysql有innodb_log_buffer_size配置項(xiàng),超過這個(gè)值會(huì)使用磁盤數(shù)據(jù),影響執(zhí)行效率。

關(guān)于事務(wù)的配置項(xiàng)說明:

innodb_buffer_pool_size

如 果用Innodb,那么這是一個(gè)重要變量。相對(duì)于MyISAM來說,Innodb對(duì)于buffer size更敏感。MySIAM可能對(duì)于大數(shù)據(jù)量使用默認(rèn)的key_buffer_size也還好,但I(xiàn)nnodb在大數(shù)據(jù)量時(shí)用默認(rèn)值就感覺在爬了。 Innodb的緩沖池會(huì)緩存數(shù)據(jù)和索引,所以不需要給系統(tǒng)的緩存留空間,如果只用Innodb,可以把這個(gè)值設(shè)為內(nèi)存的70%-80%。和 key_buffer相同,如果數(shù)據(jù)量比較小也不怎么增加,那么不要把這個(gè)值設(shè)太高也可以提高內(nèi)存的使用率。

innodb_additional_pool_size

這個(gè)的效果不是很明顯,至少是當(dāng)操作系統(tǒng)能合理分配內(nèi)存時(shí)。但你可能仍需要設(shè)成20M或更多一點(diǎn)以看Innodb會(huì)分配多少內(nèi)存做其他用途。

innodb_log_file_size

對(duì)于寫很多尤其是大數(shù)據(jù)量時(shí)非常重要。要注意,大的文件提供更高的性能,但數(shù)據(jù)庫恢復(fù)時(shí)會(huì)用更多的時(shí)間。我一般用64M-512M,具體取決于服務(wù)器的空間。

innodb_log_buffer_size

默認(rèn)值對(duì)于多數(shù)中等寫操作和事務(wù)短的運(yùn)用都是可以的。如 果經(jīng)常做更新或者使用了很多blob數(shù)據(jù),應(yīng)該增大這個(gè)值。但太大了也是浪費(fèi)內(nèi)存,因?yàn)?秒鐘總會(huì) flush(這個(gè)詞的中文怎么說呢?)一次,所以不需要設(shè)到超過1秒的需求。8M-16M一般應(yīng)該夠了。小的運(yùn)用可以設(shè)更小一點(diǎn)。

innodb_flush_log_at_trx_commit

抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了調(diào)整這個(gè)值。默認(rèn)值1的意思是每一次事務(wù)提交或事務(wù)外的指令都需要把日志寫入(flush)硬盤,這是很費(fèi)時(shí)的。特別是使用電 池供電緩存(Battery backed up cache)時(shí)。設(shè)成2對(duì)于很多運(yùn)用,特別是從MyISAM表轉(zhuǎn)過來的是可以的,它的意思是不寫入硬盤而是寫入系統(tǒng)緩存。日志仍然會(huì)每秒flush到硬 盤,所以你一般不會(huì)丟失超過1-2秒的更新。設(shè)成0會(huì)更快一點(diǎn),但安全方面比較差,即使MySQL掛了也可能會(huì)丟失事務(wù)的數(shù)據(jù)。而值2只會(huì)在整個(gè)操作系統(tǒng) 掛了時(shí)才可能丟數(shù)據(jù)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • mysql insert語句操作實(shí)例講解
  • mysql 操作總結(jié) INSERT和REPLACE
  • mysql中insert與select的嵌套使用方法
  • 正確使用MySQL INSERT INTO語句
  • MYSQL 小技巧 -- LAST_INSERT_ID
  • MySQL中insert語句的使用與優(yōu)化教程
  • MySql insert插入操作的3個(gè)小技巧分享
  • MySQL因大事務(wù)導(dǎo)致的Insert慢實(shí)例分析

標(biāo)簽:商丘 揚(yáng)州 新余 三門峽 南陽 贛州 巴中 貴州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL優(yōu)化insert性能的方法示例》,本文關(guān)鍵詞  MySQL,優(yōu)化,insert,性能,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL優(yōu)化insert性能的方法示例》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL優(yōu)化insert性能的方法示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章