复合索引在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列值来获得更好的性能?
如果我需要更详细一些解释,那么
现在我们有另一个表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)
答案 0 :(得分:1)
如果您有一个列C
的复合索引,那么排序会有所不同。通常,限制B
的查询仅不会使用索引(或者不会有效地使用它)。
最好的情况是C
上的平等条件,然后是delete
上的任何条件。
无论逻辑是在select
还是input
,都是如此。