DB2 delete语句

DB2 delete语句,db2,Db2,我需要从表1中删除表2中ID的数据。 我已执行以下语句,但即使存在索引,它仍将进行表扫描: DELETE FROM table1 t1 WHERE t1.ID IN (SELECT T.ID FROM table2 T) ; 在DB2 for delete语句中是否有其他方法连接表,以便避免表扫描。表扫描本身并不一定是坏事。 警告:如果没有表1的解释计划或DDL,您就无法获得此特定案例的完整答案 也就是说,DB2的优化器将确定执行查询的最有效计划。根据要从表1中删除的数据量,扫描表可能比为每个

我需要从
表1
中删除
表2
中ID的数据。 我已执行以下语句,但即使存在索引,它仍将进行表扫描:

DELETE FROM table1 t1 WHERE t1.ID IN (SELECT T.ID FROM table2 T) ;

在DB2 for delete语句中是否有其他方法连接表,以便避免表扫描。

表扫描本身并不一定是坏事。

警告:如果没有
表1
的解释计划或DDL,您就无法获得此特定案例的完整答案

也就是说,DB2的优化器将确定执行查询的最有效计划。根据要从
表1
中删除的数据量,扫描表可能比为每个要删除的ID遍历索引然后获取行更有效

优化器为此做出决策的一些因素包括:

  • 表和索引统计

  • 要删除的行数(相对于表1中的总行数)

  • 潜在有用索引的聚类比率(或聚类因子)

  • 上述索引中的级别数

  • 缓冲池大小(个)

  • 下面是一个极其简单的示例,说明了表扫描并不一定是坏的:

    假设
    t1
    有500页,并且您认为应该使用的索引
    i1
    有3个级别和非常低的聚类因子。此外,假设要从表中删除200行

    为了通过简单的表扫描执行删除,DB2将扫描500个数据页以查找表

    要通过索引执行删除,对于要删除的每一行,它将读取3个索引页(根页、中间页和叶页),加上保存该行的数据页。(为要删除的每行读取4个数据页)。因此,当删除200行时,使用索引意味着DB2正在读取800页(比表扫描多60%),因此优化器选择表扫描


    显然,这比这要复杂得多——索引的大小、是进行完整索引扫描还是(如上所述)逐行扫描每一行的索引、缓冲池大小、集群比率等等都会影响优化器的决策。但在很多情况下,表扫描确实是给定查询的最有效方法。

    表扫描本身并不一定是坏事。

    警告:如果没有
    表1
    的解释计划或DDL,您就无法获得此特定案例的完整答案

    也就是说,DB2的优化器将确定执行查询的最有效计划。根据要从
    表1
    中删除的数据量,扫描表可能比为每个要删除的ID遍历索引然后获取行更有效

    优化器为此做出决策的一些因素包括:

  • 表和索引统计

  • 要删除的行数(相对于表1中的总行数)

  • 潜在有用索引的聚类比率(或聚类因子)

  • 上述索引中的级别数

  • 缓冲池大小(个)

  • 下面是一个极其简单的示例,说明了表扫描并不一定是坏的:

    假设
    t1
    有500页,并且您认为应该使用的索引
    i1
    有3个级别和非常低的聚类因子。此外,假设要从表中删除200行

    为了通过简单的表扫描执行删除,DB2将扫描500个数据页以查找表

    要通过索引执行删除,对于要删除的每一行,它将读取3个索引页(根页、中间页和叶页),加上保存该行的数据页。(为要删除的每行读取4个数据页)。因此,当删除200行时,使用索引意味着DB2正在读取800页(比表扫描多60%),因此优化器选择表扫描


    显然,这比这要复杂得多——索引的大小、是进行完整索引扫描还是(如上所述)逐行扫描每一行的索引、缓冲池大小、集群比率等等都会影响优化器的决策。但在很多情况下,表扫描确实是给定查询的最有效方法。

    表扫描本身并不一定是坏事。

    警告:如果没有
    表1
    的解释计划或DDL,您就无法获得此特定案例的完整答案

    也就是说,DB2的优化器将确定执行查询的最有效计划。根据要从
    表1
    中删除的数据量,扫描表可能比为每个要删除的ID遍历索引然后获取行更有效

    优化器为此做出决策的一些因素包括:

  • 表和索引统计

  • 要删除的行数(相对于表1中的总行数)

  • 潜在有用索引的聚类比率(或聚类因子)

  • 上述索引中的级别数

  • 缓冲池大小(个)

  • 下面是一个极其简单的示例,说明了表扫描并不一定是坏的:

    假设
    t1
    有500页,并且您认为应该使用的索引
    i1
    有3个级别和非常低的聚类因子。此外,假设要从表中删除200行

    为了通过简单的表扫描执行删除,DB2将扫描500个数据页以查找表

    通过