MySQL的多行插入
由於mysql的autocommit預設為開啟的,而且很多生產環境都是設定為在事務提交時需要寫磁碟,所以提交產生的io開銷非常大。在繁忙的oltp系統中,可能這是主要的效能瓶勁.因此減少提交的次數非常重要,儘可能採用批量提交的方式而不是使用單次提交的。
Fedora 20下安裝搭建LAMP環境Apache+MySQL+PHP
《MySQL權威指南(原書第2版)》清晰中文掃描版 PDF
源碼包編譯安裝MySQL 5.6指令碼
mysql的insert語句本可以支援一次多行insert.這種方式在其他的資料庫中沒有
比如Oracle.
測試開始前
mysql> show status like '%commit%' ;
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| Com_commit | 0 |
| Com_xa_commit | 0 |
| Handler_commit | 0 |
+----------------+-------+
3 rows in set (0.00 sec)
使用多行insert。
mysql> insert into t1(a)
-> values (1),
-> (2);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
資料庫只有提交一次.
mysql> show status like '%commit%' ;
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| Com_commit | 0 |
| Com_xa_commit | 0 |
| Handler_commit | 1 |
+----------------+-------+
3 rows in set (0.00 sec)
可以看到通過這種方式可以對批量insert進行最佳化.
SQL> insert into t1(a)
2 values (1),
3 (2);
insert into t1(a)
values (1),
(2)
ORA-00933: SQL command not properly ended
對於這種直接insert多行的方式,oracle資料庫不支援。
本文永久更新連結地址: