模拟 Oracle 索引而不创建它

Simulate Oracle Index Without Creating It

有没有办法让我在不实际创建新索引的情况下测试(即在内存中?)?我想在将索引创建交给 DBA 之前对其进行测试,看看解释计划是否更好。

我的数据库是 Oracle 12c。

从 11g Oracle 开始为此准备了精确的不可见索引 - 基本思想很简单。

您创建了一个新的索引 inivisible。即没有其他会话会看到它,也不会得到可能的负面影响(请注意,与普遍的看法相反 更多索引意味着更好的性能 - 新索引可以 破坏性能一些查询).

所以只有设置了OPTIMIZER_USE_INVISIBLE_INDEXES的会话才能使用和测试invisible索引。只有在确定没有负面影响后,才可以ALTER将索引设为可见

有关详细信息,请参阅 here

简单的回答:不。仍然需要在存储位置上创建不可见索引 - 而不是内存, 以与存储数据相同的方式创建数据的子集——即相同的表空间、存储位置等,以减少创建它的时间。不幸的是,这不是 100% 的解决方案。询问您的 DBA 是否有时 DB 未被大量使用并在该时段创建索引。