复合指数如何运作?什么是在复合索引上进行数据操作的有效方法

时间:2015-10-07 16:11:13

标签: sql database db2 sql-delete composite-primary-key

复合索引在db2中如何工作? 我们有一个包含数据的表,类似于我在下面描述的内容。 主键(B,C)

  Table "D" has Table B's key and Table C's key
   B|C
  -----
   1|1
   1|2
   1|3
   2|4
   2|5
   3|5

现在,如果我想删除C列中包含(1,2,3)值的行,那么如果我这样查询就会有效

Delete from D where C in ( 1,2,3)

还是应该使用B列值来获得更好的性能?

如果我需要更详细一些解释,那么

  • 表A与表B有一对多的关系
  • 表B与表C有一对多的关系

现在我们有另一个表D,其中包含表B和表C的键。

这里我试图在表C的键的基础上删除行。如果我还需要使用表B的密钥,我应该如何查询它?我编写了选择查询,但我不得不使用C. *来过滤表D值。

SELECT C.Bkey, C.Ckey 
    FROM TableC C 
    INNER JOIN TableB B ON C.id = B.id
    INNER JOIN TableA A ON B.other_id = A.other_id
    WHERE A.other_id = 123 AND Ckey in (1,2,3)

我们有类似的删除吗?或者我应该使用两个" IN"子句(一个用于BKey列值,一个用于Ckey列)

 DELETE FROM TableD 
    WHERE Bkey IN 
     ( 
        SELECT B.Bkey 
          FROM TableB tB 
          INNER JOIN TableA tA
          ON tB.someId = tA.someId
          WHERE someId = 123
      ) AND 
  Ckey IN (1,2,3)

1 个答案:

答案 0 :(得分:1)

如果您有一个列C的复合索引,那么排序会有所不同。通常,限制B的查询不会使用索引(或者不会有效地使用它)。

最好的情况是C上的平等条件,然后是delete上的任何条件。

无论逻辑是在select还是input,都是如此。