由于mysql的autocommit默認為打開的,而且很多生產環(huán)境都是設置為在事務提交時需要寫磁盤,所以提交產生的io開銷非常大。在繁忙的oltp系統(tǒng)中,可能這是主要的性能瓶勁.因此減少提交的次數非常重要,盡可能采用批量提交的方式而不是使用單次提交的。
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進行優(yōu)化.
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數據庫不支持。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com