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 效能 的相關介紹,更多先關內容請關注php中文網。
相關推薦:
以上是關於mysql 最佳化 insert 效能 的相關介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!