gpt4 book ai didi

sql - 说服 Oracle SQL 优化器一个索引(尽管非 UNIQUE)列在实践中实际上包含唯一值

转载 作者:行者123 更新时间:2023-12-04 05:28:33 26 4
gpt4 key购买 nike

我正在编写一个 View ,该 View 使用带有非 UNIQUE 的列对其进行索引。但是,在我看来,我相信该列将只包含唯一值(由于 WHERE 子句中强加的条件)。

当有人根据该列查询 View (例如 SELECT * FROM MY_VIEW WHERE COLUMN_WITH_NON_UNIQUE_INDEX = 'foo' )时,就会发生真正的问题。优化器确信它将接收很多行(因为索引在技术上不是 UNIQUE )。因此,优化器避免在 View 中的其他地方使用其他索引,以支持全表扫描(不酷)。

有没有办法让优化器相信带有非 UNIQUE 的列索引实际上会包含唯一值吗?当然,重复值可能会潜入列中,但这将被视为错误,不应导致合法的唯一数据受到影响。

不幸的是,我无法控制有问题的 table (叹气)。

最佳答案

Oracle 允许您在未强制执行但为优化器提供准确此类信息的 View 上创建唯一(和主键)约束

ALTER VIEW your_view_name
ADD CONSTRAINT name_of_constraint UNIQUE( column_with_non_unique_index )
RELY DISABLE NOVALIDATE;

这将告诉 Oracle 它可以依赖这样一个事实,即数据是唯一的,但不需要验证约束。但是,优化器将能够使用约束提供的附加元数据。

关于sql - 说服 Oracle SQL 优化器一个索引(尽管非 UNIQUE)列在实践中实际上包含唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12913587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com