db2 - 删除语句需要很长时间
问题描述
我正在尝试从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 GEXPDBA IDX_TAB_A IDX_ZZZZZZZZZZZZZZZ
解决方案
当子表参与操作时,FK 列不在索引列列表(即)开头的索引(..., FKcol1 [, FKcol2, ...])
通常不如那些 FK 列在索引列列表开头(即)的索引高效(FKcol1 [, FKcol2, ...])
需要像问题中那样加入其父表。
所以,解决的办法就是创建这样一个索引来提高对父表的操作性能(delete
语句)。
推荐阅读
- intellij-idea - 将 MPS 与其他 JetBrains IDE 集成
- celery - 我使用 celery beat worker 创建使用台球和设置守护进程的新进程,但守护进程不起作用
- xml - 从 SAS 创建 XML 文件时包括 SAS 宏变量
- arrays - 使用 grep 和 map 函数对哈希进行排序
- spring - Spring Security CAS 和 HttpBasic,在授予票证后未调用 CasAuthentcationProvider
- google-ads-api - 基本 AWQL 请求 - CAMPAING_PERFORMANCE 仅按“日期”拆分
- css - css解释html时间对象
- vim - 如何使用 API 重用 NerdTree 核心功能?
- ruby-on-rails - 我不想在 Ruby 中重复自己
- c# - 在ajax中传递不同的值