oracle - 关闭 Oracle 中的索引

为了优化 SELECT 查询,我在使用和不使用索引的情况下运行它们并测量差异。我运行了一堆不同的类似查询并尝试选择不同的数据以确保缓存不会丢弃结果。但是,在非常大的表上,创建索引需要很长时间,而且我对什么样的索引合适有几种不同的想法。

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

或者,是否有更好的方法来优化大型表的查询并了解最好创建哪些索引?

最佳答案

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

ALTER INDEX idx1 [ INVISIBLE | VISIBLE ]

这使得它无法被优化器使用,但是 oracle 仍然会在添加或删除数据时更新索引。这使得在禁用索引的情况下测试性能变得容易,而无需删除和重建整个索引。

参见 here有关索引可见性的 oracle 文档

https://stackoverflow.com/questions/1840286/

相关文章:

xml - 对齐 ="right"在 XML 中不起作用

php - preg_replace : how do I strip off all white

oracle - 如何使用 pl/sql 循环接受用户输入?

sql-server - UPDATE 表中除 TOP 1 记录外的记录

php - eval {php} 条件

.net - 在运行时替换 .NET 类型

sql-server - 在数据库中存储 & 符号

objective-c - 将 IOKit IOReturn 错误代码映射到字符串

sql - 如何从 SQL Server 数据库可视化 nvarchar(max) 的值,其中 ma

perl - 我如何检查一个值是否在 Perl 的列表中?