我正在尝试从DB2 10.5中的父表(主键为 COL_A 的TAB_A)中删除1条记录。该表有许多子表,但是数据已从子表中删除。由于外键约束,子表(TAB_B)索引扫描(IDX1_TAB_B)中的一个花费很高。 TAB_B的综合索引为(IDX1_TAB_B = COL_C + COL_A )。在下面附加执行计划:
优化计划:
Rows
Operator
(ID)
Cost
0.04
FILTER
( 2)
1450.45
+-------------------------+-------------------+--------------------------------------+----------+-------------------+---------------------+-------------------------+---------------------------+
1 1.66864 1.07095 0 6.30251 1.26543 25.0657 1
DELETE IXSCAN IXSCAN FETCH IXSCAN IXSCAN IXSCAN IXSCAN
( 3) ( 5) ( 6) ( 7) ( 9) (10) (11) (12)
22.7049 22.7038 **1344.45** 0.0107876 15.1445 22.7036 7.58684 15.1433
/---/ \ | | /----/ \ | | | |
1 6.91522e+06 6.56409e+06 75669 0 0 1.01318e+06 4.86182e+06 213 1.66563e+06
IXSCAN Table: Index: Index: IXSCAN Table: Index: Index: Index: Index:
( 4) GEXPDBA GEXPUSRT GEXPDBA ( 8) GEXPDBA GEXPUSRT GEXPUSRT GEXPDBA GEXPDBA
15.1415 TAB_A IX6_XXXXXXXXXXXX **IDX1_TAB_B** 0.0105474 TZZZZZZZZZZZZZZZZZZZZ IX1_LLLLLLLLLLLLLLL IX1_LOOOOOOOOOOOOOOOO IX1_LOCCCCCCCCCCCCCCCCCCCC IDX_GE
| |
6.91522e+06 0
索引:索引: GEXPDBA IDX_TAB_A IDX_ZZZZZZZZZZZZZZZZZ
答案 0 :(得分:0)
FK列不在索引列列表的开头(即(..., FKcol1 [, FKcol2, ...])
)的索引通常不如FK列在索引列列表的开头(即{{1 }}),当子表涉及需要与其父表联接的操作时,如问题中所述。
因此,解决方案就是创建这样的索引以提高父表的操作性能((FKcol1 [, FKcol2, ...])
语句)。