MySQL優化insert效能的方法示例

2022-09-25 13:15:16 字數 2328 閱讀 2067

mysql效能優化

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

mysql資料庫優化,一方面是找出系統瓶頸,提高mysql資料庫整體效能;另一方面需要合理的結構設計和引數調整,以提高使用者操作響應速度;同時還要盡可能節省系統資源,以便系統可以提供更大負荷的服務。例如,通過優化檔案系統,提高磁碟i\o的讀寫書讀;通過優化作業系統排程策略,提高mysql在高負荷下的負載能力;優化表結構、索引、查詢語句等使查詢響應更快。

mysql的 insert 語句語法,關於mysql 優化 inwww.cppcns.comsert 效能 的相關介紹。

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 `in程式設計客棧sert_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一般程式設計客棧應該夠了。小的運用可以設更小一點。

in程式設計客棧nodb_flush_log_at_trx_commit

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

總結本文標題: mysql優化insert效能的方法示例

本文位址:

mysql 優化 insert 效能

mysql 的 insert 語句語法 insert into table field1 field2 values value1 value2 提高insert 效能的方法 1.一條sql語句插入多條資料 insert into insert table uid content type valu...

MySQL 提高Insert效能

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

C 批量Insert效能優化方案

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