Heim  >  Artikel  >  Datenbank  >  MySQL的多行插入

MySQL的多行插入

WBOY
WBOYOriginal
2016-06-07 16:48:551142Durchsuche

由于mysql的autocommit默认为打开的,而且很多生产环境都是设置为在事务提交时需要写磁盘,所以提交产生的io开销非常大。在繁忙的

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数据库不支持。

本文永久更新链接地址:

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn