对于大行更新缓慢但在块中确定

时间:2018-03-08 01:06:55

标签: tsql sql-server-2012 sql-update rollback

所以我试图更新1000万行表中的100万行。

我有Y的索引。

一次大规模更新似乎永远不会完成。我认为这是由于在tempdb中维护数据而导致事务需要回滚,而tempdb可能不够大并且需要寻呼到磁盘等。而块循环只需要一次为50k行执行此操作

在其他想法之后,如果我错了,请纠正我,我来自Oracle背景,因此不能完全确定回滚段的等价物是什么

<script src="//unpkg.com/vue@latest/dist/vue.js"></script>
<main>
  <video id="videoElement" controls poster="velocity-thumbnail.jpg" v-play="playing">
      <source src="https://s3-ap-northeast-1.amazonaws.com/daniemon/demos/Velocity-Mobile.mp4" type="video/mp4" media="all and (max-width:680px)"> 
      <source src="https://s3-ap-northeast-1.amazonaws.com/daniemon/demos/Velocity-Mobile.webm" type="video/webm" media="all and (max-width:680px)"> 
      <source src="https://s3-ap-northeast-1.amazonaws.com/daniemon/demos/Velocity-SD.mp4" type="video/mp4">
      <source src="https://s3-ap-northeast-1.amazonaws.com/daniemon/demos/Velocity-SD.webm" type="video/webm">
      <p>Sorry, there's a problem playing this video. Please try using a different browser.</p>
  </video>

  <div class="controls">
    <button v-show="paused" @click="play">&#9654;</button>
    <button v-show="playing" @click="pause">&#9208;</button>
  </div>
</main>

但是在一分钟内完成了50000次整理

checkMenuItem.selectedProperty().addListener((obs, wasSelected, isSelected) -> {
    if (isSelected) {
        scene.getRoot().setStyle("-fx-base:black");
    } else {
        scene.getRoot().setStyle("");
    }
});

1 个答案:

答案 0 :(得分:0)

这可能是数据库负载过重(或服务器功能不足)的情况,基于集合的操作非常繁重而且根本无法完成,因为它无法获得锁定或需要一次性处理大量资源

根据设计,游标可以处理较小的数据子集,理论上这应该较慢,但可能不适合您的特定情况。

从这里开始:https://stackoverflow.com/a/10013070/937131

  

光标可以节省您的时间 - 因为您不需要等待   处理和下载完整的记录集它将为您节省开支   内存,无论是在服务器上还是在客户端上,因为他们没有   将大量内存奉献给结果集

     

一致性:使用游标,你(通常)不会操作a   数据的一致快照,但是在一行上。所以你的   并发/一致性/隔离保证从整体上降低   数据库(ACID)只有一行。您通常可以通知您的DBMS   你想要的并发级别,但如果你太挑剔了(锁定   你所在的完整桌子,你将扔掉许多   服务器端的资源节省。