Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 带有where子句的数据库事务成本_Database_Database Performance - Fatal编程技术网

Database 带有where子句的数据库事务成本

Database 带有where子句的数据库事务成本,database,database-performance,Database,Database Performance,我有一个如下所示的数据库表 我的目的是通过一些事件将其中一行设置为默认值。这意味着,如果使用SELECT将ID=5的行设为默认值,则ID=2的行的isDefault值将设置为N,ID=5的行的值将更新为Y 正如我所想,有两种方法可以实现这一点。在这两种方式中,它都需要进行两个DB事务 将isDefault的所有行设置为N,然后将ID=5的行更新为Y 将isDefault字段更新为N,其中isDefault=Y,然后将ID=5的行更新为Y 在这两种情况下,首先我们需要遍历整个表,将isDefau

我有一个如下所示的数据库表

我的目的是通过一些事件将其中一行设置为默认值。这意味着,如果使用SELECT将ID=5的行设为默认值,则ID=2的行的isDefault值将设置为N,ID=5的行的值将更新为Y

正如我所想,有两种方法可以实现这一点。在这两种方式中,它都需要进行两个DB事务

  • isDefault的所有行设置为N,然后将ID=5的行更新为Y
  • isDefault字段更新为N,其中isDefault=Y,然后将ID=5的行更新为Y
  • 在这两种情况下,首先我们需要遍历整个表,将isDefault字段更新为N。如果表的大小增大,则遍历整个表的代价会很高,而且会很耗时


    我正在为这个场景寻找一个优化的解决方案。请让我知道,哪一个更好,为什么?我很高兴知道任何其他优化的解决方案。

    您真的不必遍历整个数据库

    在案例1中:“将isDefault的所有行设置为N,然后将ID=5的行更新为Y”,这肯定是一个错误的选择。为什么要费心把所有的行都设为N呢?我们唯一需要做的就是在案例2中:

    “将isDefault字段更新为N,其中isDefault=Y”。在这种情况下,我们必须锁定所有受影响的行,并将它们设置为
    N
    。如果列
    上的索引是类B树结构中的default
    ,则执行此操作的复杂度为O(logn);如果索引是哈希类型结构,则复杂度为O(1)(常量)。如果在“isDefault”列上没有任何索引,则必须遍历所有行,其极低的效率在实践中是不可接受的


    然后,优化的解决方案是案例2,加上“isDefault”列上的索引。

    您真的不必遍历整个数据库

    在案例1中:“将isDefault的所有行设置为N,然后将ID=5的行更新为Y”,这肯定是一个错误的选择。为什么要费心把所有的行都设为N呢?我们唯一需要做的就是在案例2中:

    “将isDefault字段更新为N,其中isDefault=Y”。在这种情况下,我们必须锁定所有受影响的行,并将它们设置为
    N
    。如果列
    上的索引是类B树结构中的default
    ,则执行此操作的复杂度为O(logn);如果索引是哈希类型结构,则复杂度为O(1)(常量)。如果在“isDefault”列上没有任何索引,则必须遍历所有行,其极低的效率在实践中是不可接受的

    然后,优化的解决方案是案例2,加上“isDefault”列上的索引