关闭Oracle中的索引

Eli*_*ght 1 oracle indexing optimization

为了优化SELECT查询,我使用和不使用索引运行它们并测量差异.我运行了一堆不同的类似查询,并尝试选择不同的数据,以确保缓存不会丢失结果.但是,在非常大的表上,索引需要很长时间才能创建,并且我对于哪些索引是合适的有几个不同的想法.

在Oracle(或任何其他数据库)中是否可以执行查询但是在执行查询时告诉数据库不使用某个索引?或者只是完全关闭索引,但是能够轻松地将其重新打开而无需重新索引整个表格?这样可以更容易测试,因为我可以创建我正在考虑的所有索引,然后尝试使用不同的查询.

或者,有没有更好的方法来优化大型表上的查询并知道哪些索引最适合创建?

the*_*oop 9

您可以在11g中设置索引可见性 -

ALTER INDEX idx1 [ INVISIBLE | VISIBLE ]
Run Code Online (Sandbox Code Playgroud)

这使得优化器无法使用它,但oracle在添加或删除数据时仍会更新索引.这样可以轻松地在禁用索引的情况下测试性能,而无需删除和重建整个索引.

请参阅此处了解有关索引可见性的oracle文档