我正在编写一个使用带有非UNIQUE
索引列的视图。但是,在我的观点范围内,我相信该列将仅包含唯一值(由于该WHERE
子句中施加的条件)。
当有人基于该列(例如SELECT * FROM MY_VIEW WHERE COLUMN_WITH_NON_UNIQUE_INDEX = 'foo'
)查询视图时,就会出现真正的问题。优化器确信它将接收许多行(因为索引在技术上不是UNIQUE
)。因此,优化器避免在视图中的其他位置使用其他索引以支持全表扫描(不酷)。
有没有办法让优化器相信具有非UNIQUE
索引的列实际上将包含唯一值?当然,重复值可能会潜入列中,但这将被视为错误,不应导致合法的唯一数据受到影响。
不幸的是,我无法控制有问题的桌子(叹气)。