mysql 優化 insert 效能

2022-08-10 23:30:37 字數 2080 閱讀 8480

mysql 的 insert 語句語法

insert into `table`(`field1`,`field2`) values('value1','value2');

提高insert 效能的方法

1.一條sql語句插入多條資料

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.使用事務

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配置項修改,預設為1m。

2.事務太大會影響執行效率,mysql有innodb_log_buffer_size配置項,超過這個值會使用磁碟資料,影響執行效率。

關於事務的配置項說明:

innodb_buffer_pool_size

如 果用innodb,那麼這是乙個重要變數。相對於myisam來說,innodb對於buffer size更敏感。mysiam可能對於大資料量使用預設的key_buffer_size也還好,但innodb在大資料量時用預設值就感覺在爬了。 innodb的緩衝池會快取資料和索引,所以不需要給系統的快取留空間,如果只用innodb,可以把這個值設為記憶體的70%-80%。和 key_buffer相同,如果資料量比較小也不怎麼增加,那麼不要把這個值設太高也可以提高記憶體的使用率。

innodb_additional_pool_size

這個的效果不是很明顯,至少是當作業系統能合理分配記憶體時。但你可能仍需要設成20m或更多一點以看innodb會分配多少記憶體做其他用途。

innodb_log_file_size

對於寫很多尤其是大資料量時非常重要。要注意,大的檔案提供更高的效能,但資料庫恢復時會用更多的時間。我一般用64m-512m,具體取決於伺服器的空間。

innodb_log_buffer_size

預設值對於多數中等寫操作和事務短的運用都是可以的。如 果經常做更新或者使用了很多blob資料,應該增大這個值。但太大了也是浪費記憶體,因為1秒鐘總會 flush(這個詞的中文怎麼說呢?)一次,所以不需要設到超過1秒的需求。8m-16m一般應該夠了。小的運用可以設更小一點。

innodb_flush_log_at_trx_commit

抱怨innodb比myisam慢 100倍?那麼你大概是忘了調整這個值。預設值1的意思是每一次事務提交或事務外的指令都需要把日誌寫入(flush)硬碟,這是很費時的。特別是使用電 池供電快取(battery backed up cache)時。設成2對於很多運用,特別是從myisam表轉過來的是可以的,它的意思是不寫入硬碟而是寫入系統快取。日誌仍然會每秒flush到硬 盤,所以你一般不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即使mysql掛了也可能會丟失事務的資料。而值2只會在整個作業系統

掛了時才可能丟資料。 

MySQL優化insert效能的方法示例

mysql效能優化 mysql效能優化就是通過合理安排資源,調整系統引數使mysql執行更快 更節省資源。mysql效能優化包括查詢速度優化 更新速度優化 mysql伺服器優化等。本篇部落格將從查詢優化 資料庫結構優化 mysql伺服器優化3個方面介紹。mysql資料庫優化,一方面是找出系統瓶頸,提...

MySQL 提高Insert效能

插入乙個記錄需要的時間由下列因素組成,其中的數字表示大約比例 這不考慮開啟表的初始開銷,每個併發執行的查詢開啟。表的大小以logn b樹 的速度減慢索引的插入。加快插入的一些方法 有選擇地用create table建立表。執行flush tables語句或命令mysqladmin flush tab...

C 批量Insert效能優化方案

近期遇到乙個多個sql檔案載入到sql server的效能問題。由於某種歷史原因,每個sql檔案中,都是insert into語句。這些語句執行起來,效能可優化空間不大,除非重新改寫整個sql語句的生成機制。在研究此問題的過程中,了解到c 本身提供了sqlbulkcopy類,可實現批量資料匯入,頗有...