相同环境下同一条update语句,慢的时候执行了1.5天,快的时候2个小时就执行完了,通过执行@awrsqrpt.sql脚本抓取当时的执行计划,发现有如下不同:
慢的情况下的执行计划:
| Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time |
|---|---|---|---|---|---|---|
| 0 | UPDATE STATEMENT | 8 (100) | ||||
| 1 | UPDATE | ZJWB_ANJIANZT | ||||
| 2 | NESTED LOOPS | |||||
| 3 | NESTED LOOPS | 1 | 61 | 8 (13) | 00:00:01 | |
| 4 | VIEW | VW_NSO_1 | 1 | 27 | 5 (20) | 00:00:01 |
| 5 | SORT UNIQUE | 1 | 30 | 5 (20) | 00:00:01 | |
| 6 | SORT GROUP BY | 1 | 30 | 5 (20) | 00:00:01 | |
| 7 | TABLE ACCESS BY INDEX ROWID | ZJWB_ANJIANZT | 1 | 30 | 4 (0) | 00:00:01 |
| 8 | INDEX RANGE SCAN | IX_CHULIBJ_ZJWB_ANJIANZT | 1 | 3 (0) | 00:00:01 | |
| 9 | INDEX RANGE SCAN | IX_CHULIBJ_ZJWB_ANJIANZT | 1 | 2 (0) | 00:00:01 | |
| 10 | TABLE ACCESS BY INDEX ROWID | ZJWB_ANJIANZT | 1 | 34 | 3 (0) | 00:00:01 |
快的时候的执行计划:
| Id | Operation | Name | Rows | Bytes | TempSpc | Cost (%CPU) | Time |
|---|---|---|---|---|---|---|---|
| 0 | UPDATE STATEMENT | 147K(100) | |||||
| 1 | UPDATE | ZJWB_ANJIANZT | |||||
| 2 | HASH JOIN | 12G | 699G | 39M | 147K (83) | 00:29:27 | |
| 3 | VIEW | VW_NSO_1 | 1053K | 27M | 14580 (3) | 00:02:55 | |
| 4 | SORT UNIQUE | 1053K | 27M | 14580 (3) | 00:02:55 | ||
| 5 | SORT GROUP BY | 1053K | 27M | 81M | 14580 (3) | 00:02:55 | |
| 6 | TABLE ACCESS FULL | ZJWB_ANJIANZT | 1062K | 27M | 6492 (3) | 00:01:18 | |
| 7 | TABLE ACCESS FULL | ZJWB_ANJIANZT | 1150K | 38M | 6494 (3) | 00:01:18 |
并不是所有的表创建了索引就一定快,如果表上某个列的值唯一性比较强,创建索引比较好,但是如果重复性比较高的话,不适合创建索引。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10322123/viewspace-611954/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10322123/viewspace-611954/
本文通过对比同一SQL更新语句在不同情况下的执行计划,揭示了导致执行时间从2小时到1.5天巨大差异的原因。分析指出,在某些情况下,使用全表扫描配合哈希连接可能比依赖索引更为高效。
680

被折叠的 条评论
为什么被折叠?



