2016-02-13 78 views
1

我有一个数据库表,如下所示。数据库交易成本与条款

Database Table

我的目的是设置行默认的一些事件之一。这意味着,如果使用选择以与ID的行= 5作为默认值,则ISDEFAULT用于行与ID值= 2将被设置为Ñ并用ID = 5将相同的用于行更新至Y

正如我想到的,有两种方法来实现这一点。在这两种方式中,它都需要进行两次数据库事务。

  1. 设置ISDEFAULT的所有行到Ñ,然后更新与ID = 5〜ý的行。
  2. 更新ISDEFAULT字段Ñ其中ISDEFAULT = Y,然后更新与ID = 5〜ý的行。

在这两种情况下,我们首先需要遍历整个表到ISDEFAULT场升级到ñ。如果表大小增长,遍历整个表成本高且耗时。

我正在寻找针对此方案的优化解决方案。请让我知道,哪一个更好,为什么?我会欣赏知道任何其他优化的解决方案。

回答

0

你真的不必遍历整个数据库!

在情况1中:“将isDefault的所有行设置为N,然后将ID = 5的行更新为Y.”,这绝对是一个不错的选择。为什么要把所有的行都设置为N?我们唯一需要做的是在案例2中:

“将isDefault字段更新为N,其中isDefault = Y”。在这种情况下,我们必须锁定所有受影响的行并将它们设置为N。如果B树类似结构中的列isDefault上的索引或O(1)(常数)(如果索引是散列类型结构),则这样做的复杂度为O(log n)。如果在'isDefault'列上没有任何索引,则必须遍历所有行,这些行在实践中效率低下是不可接受的。

然后优化的解决方案是情况2,再加上'isDefault'列上的索引。