复合索引如何工作?什么是对复合索引进行数据操作的有效方法

How composite index works ? and what is the efficient way to do data manipulation on composite index

复合索引在 db2 中如何工作? 我们有一个 table 的数据,类似于我在下面描述的内容。 主键 (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 列值以获得更好的性能?

如果我必须解释得更详细一点,那么

现在我们有另一个 table D,它包含 Table B 和 Table C 的密钥。

这里我尝试根据Table C 的键删除行。如果我也需要使用Table B的密钥,我该如何查询呢?我已经编写了 select 查询,但我不得不使用 C.* 来过滤 table 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)

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

最好的情况是 B 上的相等条件后跟 C 上的任何条件。

无论逻辑是在 delete 还是 select 中都是如此。