什么是更快,一个包含许多查询的事务或每个查询是一个单独的事务?
包含许多查询的一个事务:
db.transaction(function (tx){
tx.executeSql('INSERT INTO TEST VALUES ("Halo1" ,"Halo2")', [], win, fail);
tx.executeSql('INSERT INTO TEST VALUES ("Halo3" ,"Halo4")', [], win, fail);
tx.executeSql('INSERT INTO TEST VALUES ("Halo5" ,"Halo6")', [], win, fail);
.
.
.
.
});
每个查询一个事务:
db.transaction(function(tx){
tx.executeSql('INSERT INTO TEST VALUES ("Halo1" ,"Halo2")', [], win, fail);
});
db.transaction(function(tx){
tx.executeSql('INSERT INTO TEST VALUES ("Halo3" ,"Halo4")', [], win, fail);
});
and so on.....
我需要这个信息,因为我必须在一个表中插入许多记录。
答案 0 :(得分:2)
这是一种权衡。因为你要避免将这些事务提交到最后,但是测量,不要猜测!
另一方面,您不希望过多地放入单个事务,因为DBMS必须维护有关事务的控制信息(回滚或前滚日志等)。
我通常会选择中途位置。在自动执行每个N
插入的函数中插入您的插入。类似于伪代码的东西:
counter = 50
start new transaction # always start a transaction
for each insert_cmd in insert_list:
call do_it (insert_cmd)
commit current transaction # and always end it
def do_it (insert_cmd):
if counter < 1:
commit current transaction
start new transaction
counter = 50
execute insert_cmd
counter = counter - 1
请确保您没有规避创建交易的全部原因。它们是A
属性(原子性)中的ACID
。如果要求插入作为单个事务完成以正确维护数据,那么以这种方式。
答案 1 :(得分:1)
一个包含许多插入的事务总是会更快 - 更快!也就是说,如果出现问题,您将丢失以前的所有插入内容......
答案 2 :(得分:1)
确定部分源代码速度的最快方法是围绕特定部分进行大约5.000次迭代的循环(可能更多,取决于代码执行的速度)并测量循环开始之前的时间戳之间的时间差。之后的时间戳。 适用于支持任何时间测量的各种语言。希望这会有所帮助。
答案 3 :(得分:0)
使用单个事务会更快,但这并不意味着它使用的资源更少。
在第一次插入时,事务将锁定表的一部分或整个表。尝试使用该表的任何其他查询将排队,直到事务结束。您不仅应该考虑插入时间,还要考虑其他查询无法运行时浪费的时间。
如果并发连接很少,通常不是一个大问题。如果数据库负载很大,则应考虑使用较小的事务。通过将表锁定更短的时间,您将避免排队查询。