由于mysql的autocommit默認(rèn)為打開(kāi)的,而且很多生產(chǎn)環(huán)境都是設(shè)置為在事務(wù)提交時(shí)需要寫磁盤,所以提交產(chǎn)生的io開(kāi)銷非常大。在繁忙的oltp系統(tǒng)中,可能這是主要的性能瓶勁.因此減少提交的次數(shù)非常重要,盡可能采用批量提交的方式而不是使用單次提交的。
mysql的insert語(yǔ)句本可以支持一次多行insert.這種方式在其他的數(shù)據(jù)庫(kù)中沒(méi)有
比如Oracle.
測(cè)試開(kāi)始前
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
數(shù)據(jù)庫(kù)只有提交一次.
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)
可以看到通過(guò)這種方式可以對(duì)批量insert進(jìn)行優(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
對(duì)于這種直接insert多行的方式,oracle數(shù)據(jù)庫(kù)不支持。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com