关于mysql的批量更新
mysql数据批量更新
updateasetb=1whereidin($ids)andid!=$_GET['id'];
updateasetb=0whereidnotin($ids)andid!=$_GET['id'];
本回答由网友推荐
mysql 批量更新10000+的数据,有什么效率比较高的方法
首先,插入上万条数据,对于数据库来说并不是“很大”的工作量,一般配置的笔记本电脑都可以在1分钟内完成。所以最简单、最灵活的办法还是写SQL语句。
如果不希望DB编译器每次执行都编译SQL的话,可以使用存储过程,直接调用,性能上会好很多。也比较简单。
(几万条数据怎么地也得要时间去处理,所以不可能特别快的。)
如果由于各种原因,导致这个插入还是很慢,而且你的MYSQL又是5.0以上版本的话,可以使用BulkCopy来进行批量操作。
BulkCopy的原理就是Client直接把一个数组(DataTable)传给DB,然后传入表名,所有的编译、操作都由DB自己完成,效率很高。
引用MySql.Data.dll,调用MysqlBulkCopy函数即可。
这个函数在处理海量数据插入的时候效率尤为明显,小量数据反而没什么优势,而且由于传入的DataTable格式必须和表的字段一模一样(空的列也要传进去),导致C#要写很多代码来构造这个数组,所以要你自己权衡用还是不用。
我在自己的电脑上批量插入一亿条数据,Insert写法大概需要1小时,BulkCopy大概只需要5分钟。
怎么样用java把excel批量导入到mysql不是用循环的方法
自己写的Java程序批量导入肯定要用循环的啊...
不知道有没有这样的导入的api,不过最笨的办法就是一个一个文件导入。
如何把excel导入mysql我前天回答了一个类似的问题,你可以参考下~
怎么样用java把excel批量导入到mysql不是用循环的方法
自己写的Java程序批量导入肯定要用循环的啊...
不知道有没有这样的导入的api,不过最笨的办法就是一个一个文件导入。
如何把excel导入mysql我前天回答了一个类似的问题,你可以参考下~
mysql 批量更新10000+的数据,有什么效率比较高的方法
首先, 插入上万条数据,对于数据库来说并不是“很大”的工作量,一般配置的笔记本电脑都可以在1分钟内完成。 所以最简单、最灵活的办法还是写SQL语句。
如果不希望DB编译器每次执行都编译SQL的话,可以使用存储过程,直接调用,性能上会好很多。也比较简单。
(几万条数据怎么地也得要时间去处理,所以不可能特别快的。)
如果由于各种原因,导致这个插入还是很慢, 而且你的MYSQL又是5.0以上版本的话,可以使用BulkCopy来进行批量操作。
BulkCopy的原理就是Client直接把一个数组(DataTable)传给DB,然后传入表名,所有的编译、操作都由DB自己完成,效率很高。
引用MySql.Data.dll , 调用MysqlBulkCopy函数即可。
这个函数在处理海量数据插入的时候效率尤为明显, 小量数据反而没什么优势,而且由于传入的DataTable格式必须和表的字段一模一样(空的列也要传进去),导致C#要写很多代码来构造这个数组,所以要你自己权衡用还是不用。
我在自己的电脑上批量插入一亿条数据,Insert写法大概需要1小时,BulkCopy大概只需要5分钟。同问。。。
如何提高mysql大批量数据更新的效率
mysql的项目,需要设计一个快速上载的机制。最后的解决办法是利用了mysql的预处理语句的特性实现的。mysql的预处理语句支持多行数据的预处理,即 insert into (columnName,columnName,...) values(?,?,...)(?,?,..)...。这样你在绑定输入参数的时候可以在程序里将整张表的数据都绑定好然后调用一次执行就能将整张表的数据插入,比用mysql_query一行一行插入省的几倍的时间。不过你一次发到mysql服务器端的数据多的情况下,要设置my.ini文件下的一个配置项,把服务器允许一次发送的数据包的大小调大就行。需要将大量数据(大概5w条)插入mysql数
据库,用普通的sql
statement执行,时间大概是几分钟。于是想到用preparedstatement,但是改了之后发现效率并没有很大的提升。不成,想到了
load data local
infile...命令,以前一直认为这条命令仅限mysql终端上使用而不是标准的sql语句,今天看了几篇文章之后有了很大的收获。
1. 使用preparedstatement batch operation
以前使用preparedstatement性能没有很大提升的原因在于:
没有使用批处理方法
在语句执行之前应关闭事务自动提交,语句执行完之后再提交
public
void batchload(connection connection)
try
connection.setautocommit(false);
bufferedreader reader =
new bufferedreader(new
filereader("tfacts_result"));
string sqlstring =
"insert into test(node1, node2, weight) values(?, ?, ?)";
preparedstatement pstmt = connection.preparestatement(sqlstring);
string line =
null;
while(true)
line = reader.readline();
if(line == null)
break;
string[] columns = line.split("\t");
for(int
i = 1; i <= columns.length; i++)
pstmt.setstring(i, columns[i-1]);
pstmt.addbatch();
pstmt.executebatch();
connection.commit();
pstmt.close();
reader.close();
catch (filenotfoundexception e) {
e.printstacktrace();
}catch
(sqlexception e){
e.printstacktrace();
}catch
(ioexception e){
e.printstacktrace();
}
2.使用load data local infile into tabel xxx(注意在文件中用\t将每列数据隔开)
public
void loaddata(connection connection)
long
startime = system.currenttimemillis();
string sqlstring =
"load data local infile ? into table test";
preparedstatement pstmt;
try
pstmt = connection.preparestatement(sqlstring);
pstmt.setstring(1,
"tfacts_result");
pstmt.executeupdate();
pstmt.close();
}
catch (sqlexception e) {
e.printstacktrace();
}
endtime = system.currenttimemillis();
system.out.println("program runs "
+ (endtime - startime) + "ms");
测试了5w条数据,preparedstatement耗时10s,而load data infile耗时3s。