暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

我在oracle 12c上,我有下面和livesql链接中定义的表。如果我更新表中的统计信息,将不会进入嵌套循环

ASKTOM 2020-08-20
205

问题描述



我有两个表和索引如下在Oracle Database 12c标准版12.1.0.2.0-64bit生产中描述。snapshot_id上的索引不是唯一的,因为我认为它会引起问题

create table TABLE1 (
    SNAPSHOT_ID varchar2(50),
    FLEET_BUCKET_ID number(3,0)
);

CREATE INDEX TABLE1_IDX1 ON TABLE1 ("SNAPSHOT_ID");

CREATE TABLE TABLE2
( "SNAPSHOT_ID" VARCHAR2(50 BYTE), 
 "VRM_ID" VARCHAR2(50 BYTE), 
 "SNAP_TIME_ID" NUMBER(4,0), 
 "SNAP_DATETIME" TIMESTAMP (6), 
 "ETL_LOG_ID" VARCHAR2(12 BYTE)
);
/

CREATE INDEX TABLE2_IDX2 ON TABLE2("SNAP_DATETIME");
/

CREATE INDEX TABLE2_IDX1 ON TABLE2("SNAPSHOT_ID");
/
复制


在我的实际环境中,表创建设置如下

表格选项
立即创建细分市场
PCTFREE 10 pct二手40 INITRANS 1 MAXTRANS 255
NOCOMPRESS日志记录
存储 (初始65536下一个1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
Pct增加0自由主义者1自由主义者组1
BUFFER_POOL默认FLASH_CACHE默认CELL_FLASH_CACHE默认)
表空间 “XXXXXXX”

索引选项
PCTFREE 10 INITRANS 2 MAXTRANS 255计算统计
存储 (初始65536下一个1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
Pct增加0自由主义者1自由主义者组1
BUFFER_POOL默认FLASH_CACHE默认CELL_FLASH_CACHE默认)
表空间 “XXXXXX”;


我运行以下sql

SELECT 
    s1.SNAPSHOT_ID,
    s1.FLEET_BUCKET_ID
FROM TABLE1 s1,
     TABLE2 s2
WHERE 1 = 1
  AND s2.SNAP_DATETIME  >= TO_DATE('2020-08-16 02:20:00','YYYY-MM-DD HH24:MI:SS') 
  AND s2.SNAP_DATETIME  <= TO_DATE('2020-08-16 02:20:01','YYYY-MM-DD HH24:MI:SS')
  AND s2.snapshot_id = s1.snapshot_id
复制


一旦在表1上运行统计信息,表1和表2之间的连接就是哈希。优化器没有拾取嵌套循环的任何原因?似乎应该这样,特别是当我的实际表而不是测试的18,000,000行。即使当我移动到测试表的表在100,000行下也会发生这种情况。事实证明,SNAPSHOT_ID在两个表中都是不同的值。

现在,use_n1(s1 s2) 确实在sqldeveloper中选择了它,但是无论出于何种原因,我实际上正在开发的时间都较慢,而我似乎是哈希连接时间。

专家解答

Any reason why the optimizer is not picking up the nested loop?

任何原因should选择嵌套循环?

这些最适合在每个表上连接一小部分行时。示例脚本仅插入几行,因此很难得出有关性能的有意义的结论。特别是如果你有1800万行在真实的表!

而且-正如您在12c上一样-优化器可能正在为此查询使用自适应联接。这意味着它同时考虑了哈希连接和嵌套循环。然后在运行时根据从外部表中获取的行数选择一个。

因此,哈希联接很可能是此查询和数据集的最佳方法。

与自适应详细信息共享查询的执行计划,我们可以进一步调查。使用以下内容获取此信息:

set serveroutput off
alter session set statistics_level = all;

select * from ;

select * 
from   table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST +ADAPTIVE'));
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论