本文目录一览:
1、mysql怎么快速插入大量数据
2、使用JDBC在MySQL数据库中如何快速批量插入
3、MySQL如何快速插入大量数据
4、mysql数据库中怎么批量插入数据
5、MYSQL批量插入数据库实现语句性能分析
6、mysql批量插入数据怎么写sql语句呢?
mysql怎么快速插入大量数据
通过导入文件的方式插入,文件可以用其他方式先生成,比如使用Java,来生成data1.txt
,然后使用下面的SQL语句:
LOAD DATA LOCAL INFILE 'd:/data1.txt' REPLACE INTO TABLE hk_acinfo LINES TERMINATED BY '\r\n'
使用这个方法,我插入过1千万以上的数据,如果没有网络影响的话,每秒1M+/s的速度写入,很快。
使用JDBC在MySQL数据库中如何快速批量插入
可以使用JDBC预编译+批量更新,这样的执行效率最高。
具体是这样使用的:
循环2000条数据,例如数据被装到了一个名叫dataList
的List<Map<String, String>>
中,那么批量更新就是这样执行的:
Map map = null;
String data1 = "";
String data2 = "";
String sql = "INSERT INTO biao VALUES(?,?)";
PreparedStatement preStmt = conn.prepareStatement(sql);
for (int i = 0; i < dataList.size(); i++) {
map = dataList.get(i);
data1 = map.get("data1");
data2 = map.get("data2");
preStmt.setString(1, data1);
preStmt.setString(2, data2);
preStmt.addBatch();
}
preStmt.executeBatch();
preStmt.clearBatch();
MySQL如何快速插入大量数据
通过导入文件的方式插入,文件可以用其他方式先生成,比如使用Java,来生成data1.txt
,然后使用下面的SQL语句:
LOAD DATA LOCAL INFILE 'd:/data1.txt' REPLACE INTO TABLE hk_acinfo LINES TERMINATED BY '\r\n'
使用这个方法,我插入过1千万以上的数据,如果没有网络影响的话,每秒1M+/s的速度写入,很快。
mysql数据库中怎么批量插入数据
常见的INSERT
语句,向数据库中,一条语句只能插入一条数据:
INSERT INTO persons
(id_p, lastname, firstName, city)
VALUES (204, 'haha', 'deng', 'shenzhen');
(如上,仅插入了一条记录)
怎样一次INSERT
插入多条记录呢?
使用示例:
INSERT INTO persons
(id_p, lastname, firstName, city)
VALUES
(200, 'haha', 'deng', 'shenzhen'),
(201, 'haha2', 'deng', 'GD'),
(202, 'haha3', 'deng', 'Beijing');
这样就批量插入数据了,遵循这样的语法,就可以批量插入数据了。 据说,在程序开发中,一次插入多条数据,比逐次一条一条的插入数据,效率高很多。 所以在程序开发的时候,使用此批量插入,也是比较不错的。 此语句在MySQL 5,PostgreSQL 9.3执行通过。
MYSQL批量插入数据库实现语句性能分析
假定我们的表结构如下:
CREATE TABLE example (
example_id INT NOT NULL,
name VARCHAR(50) NOT NULL,
value VARCHAR(50) NOT NULL,
other_value VARCHAR(50) NOT NULL
);
通常情况下单条插入的SQL语句我们会这么写:
INSERT INTO example (example_id, name, value, other_value)
VALUES (100, 'Name1', 'Value1', 'Other1');
MySQL允许我们在一条SQL语句中批量插入数据,如下SQL语句:
INSERT INTO example (example_id, name, value, other_value)
VALUES
(100, 'Name1', 'Value1', 'Other1'),
(101, 'Name2', 'Value2', 'Other2'),
(102, 'Name3', 'Value3', 'Other3'),
(103, 'Name4', 'Value4', 'Other4');
如果我们插入列的顺序和表中列的顺序一致的话,还可以省去列名的定义,如下SQL:
INSERT INTO example
VALUES
(100, 'Name1', 'Value1', 'Other1'),
(101, 'Name2', 'Value2', 'Other2'),
(102, 'Name3', 'Value3', 'Other3'),
(103, 'Name4', 'Value4', 'Other4');
上面看上去没什么问题,下面我来使用SQL语句优化的小技巧,下面会分别进行测试,目标是插入一个空的数据表200W条数据。
第一种方法:使用INSERT INTO
插入
$params = array('value' => '50');
set_time_limit(0);
echo date("H:i:s");
for ($i = 0; $i < 2000000; $i++) {
$connect_mysql->insert($params);
}
echo date("H:i:s");
最后显示为:23:25:05 → 01:32:05,也就是花了2个小时多!
第二种方法:使用事务提交,批量插入数据库(每隔10W条提交下)
echo date("H:i:s");
$connect_mysql->query('BEGIN');
$params = array('value' => '50');
for ($i = 0; $i < 2000000; $i++) {
$connect_mysql->insert($params);
if ($i % 100000 == 0) {
$connect_mysql->query('COMMIT');
$connect_mysql->query('BEGIN');
}
}
$connect_mysql->query('COMMIT');
echo date("H:i:s");
最后显示消耗的时间为:22:56:13 → 23:04:00,一共8分13秒。
第三种方法:使用优化SQL语句
将SQL语句进行拼接,使用INSERT INTO table () VALUES (),(),(),()
然后再一次性插入,如果字符串太长,则需要配置下MySQL,在MySQL命令行中运行:
SET GLOBAL max_allowed_packet = 2*1024*1024*10;
消耗时间为:11:24:06 → 11:25:06;插入200W条测试数据仅仅用了1分钟!
$sql = "INSERT INTO twenty_million (value) VALUES";
for ($i = 0; $i < 2000000; $i++) {
$sql .= "('50'),";
}
$sql = substr($sql, 0, strlen($sql) - 1);
$connect_mysql->query($sql);
最后总结下,在插入大批量数据时,第一种方法无疑是最差劲的,而第二种方法在实际应用中就比较广泛,第三种方法在插入测试数据或者其他低要求时比较合适,速度确实快。
mysql批量插入数据怎么写sql语句呢?
如果就一个name
字段并且ID
是自增的话就这样:
INSERT INTO tablename VALUES('name1','name2','name3','name4')
否则就这样:
INSERT INTO tablename VALUES(('1','name1'),('3','name2'),('2','name3'),('8','name4'))
当然也可以这样写,上面的是简化的:
INSERT INTO tablename (name) VALUES ('name1','name2','name3','name4')
INSERT INTO tablename (id,name) VALUES (('1','name1'),('3','name2'),('2','name3'),('8','name4'))