首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事务速度与查询速度

事务速度与查询速度
EN

Stack Overflow用户
提问于 2011-05-31 14:32:51
回答 4查看 1.2K关注 0票数 0

哪个更快,一个事务有多个查询,还是每个查询都有一个单独的事务?

一个事务有多个查询:

代码语言:javascript
复制
 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);
      .
      .
      .
      .
   });

每个查询一个事务:

代码语言:javascript
复制
    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.....

我需要这个信息,因为我必须在一个表中插入许多记录。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-31 14:38:10

这是一种权衡。几乎可以肯定的是,在一个事务中使用许多语句会更快,因为您可以避免在事务结束之前提交这些事务的开销,但是请注意,不要猜测!

另一方面,您不希望在单个事务中放入太多内容,因为DBMS必须维护有关该事务的控制信息(回滚或前滚日志等)。

我通常会选择一个折中的立场。在一个自动提交每个N插入的函数中执行插入。类似于伪代码:

代码语言:javascript
复制
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

只需确保您没有绕过创建事务的全部原因。它们是ACID属性中的A (原子性)。如果需要将插入作为单个事务来完成以正确地维护数据,那么可以这样做。

票数 2
EN

Stack Overflow用户

发布于 2011-05-31 14:38:44

具有多个插入的一个事务总是更快--快得多!也就是说,如果某些东西失败了,您将丢失所有以前的插入...

票数 1
EN

Stack Overflow用户

发布于 2011-05-31 14:40:21

确定部分源代码速度的最快方法是围绕特定部分进行大约5.000次迭代(可能更多,取决于代码执行的速度),并测量循环开始前的时间戳和之后的时间戳之间的时间差。适用于支持任何时间测量的每种语言。希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6183810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档