【发布时间】:2021-10-06 18:41:35
【问题描述】:
我有两个疑问:
select * from PRE_DETAIL_REPORT a where item = (select item from apple_skus);
select * from PRE_DETAIL_REPORT a where item IN ('100299122');
表:APPLE_SKUS
只有一项:100299122
当我运行第一个查询时,执行需要 2 分钟 当我运行第二个查询时,执行需要 3 秒
可能是什么原因?
【问题讨论】:
-
查询 1 还必须读取 apple_skus 表。
-
表格只有一行
-
对不起,错过了那部分。比较执行计划。
-
对两者运行解释计划并发布结果
-
PRE_DETAIL_REPORT是视图吗?APPLE_SKUS是一张曾经很大但被删除到一行的表 - 如果没有回收该空间,有时单行可能会占用磁盘上的大量空间。运行此查询以查看使用了多少兆字节的磁盘空间来存储那一行数据:select bytes/1024/1024 mb from dba_segments where segment_name = 'APPLE_SKUS';要生成解释计划,请运行explain plan for select ...,然后运行select * from table(dbms_xplan.display),对这两个查询,然后编辑问题计划。