模拟Oracle索引而不创建它

模拟Oracle索引而不创建它,oracle,indexing,virtual,explain,Oracle,Indexing,Virtual,Explain,我有没有办法测试一个新的索引,比如内存中的索引?还没有真正创造出来?在我将索引创建交给DBA之前,我想测试一下,看看解释计划是否更好 我的数据库是Oracle 12c。从11g Oracle开始,正是出于这个原因准备的可见索引-基本思想很简单 您创建了一个新的索引。i、 e.没有其他会话会看到它,也不会得到可能的负面影响。请注意,与流行的观点相反,更多的索引意味着更好的性能-新索引可能会破坏某些查询的性能 因此,只有设置优化器使用不可见索引的会话才能使用和测试不可见索引。只有在确定没有负面影响后

我有没有办法测试一个新的索引,比如内存中的索引?还没有真正创造出来?在我将索引创建交给DBA之前,我想测试一下,看看解释计划是否更好


我的数据库是Oracle 12c。

从11g Oracle开始,正是出于这个原因准备的可见索引-基本思想很简单

您创建了一个新的索引。i、 e.没有其他会话会看到它,也不会得到可能的负面影响。请注意,与流行的观点相反,更多的索引意味着更好的性能-新索引可能会破坏某些查询的性能

因此,只有设置优化器使用不可见索引的会话才能使用和测试不可见索引。只有在确定没有负面影响后,才能将索引更改为可见


有关更多详细信息,请参见

从11g Oracle开始,正是出于这个原因准备的可见索引-基本思想很简单

您创建了一个新的索引。i、 e.没有其他会话会看到它,也不会得到可能的负面影响。请注意,与流行的观点相反,更多的索引意味着更好的性能-新索引可能会破坏某些查询的性能

因此,只有设置优化器使用不可见索引的会话才能使用和测试不可见索引。只有在确定没有负面影响后,才能将索引更改为可见


有关更多详细信息,请参阅。

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

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

我很惊讶DBA没有确定哪些索引是合适的。创建一个假的/迷你版的索引可能会给您带来误导性的结果。获得更好的计划取决于让优化器基于真实数据量和分布使用真实统计数据。所以,如果它很小,你可以在内存中创建它,那么创建它并真正测试它就足够便宜了。@GordonLinoff我一点也不奇怪-索引的必要性取决于应用程序,而这些应用程序并不总是DBA的主要关注点。。。从各种ORM等产生的动态SQL使这变得不容易。这是一个好方法,但也请运行查询,仅比较执行计划的成本并不意味着查询确实执行得更好……我很惊讶DBA没有确定哪些索引是合适的。创建一个假的/迷你版的索引可能只会产生误导性的结果。获得更好的计划取决于让优化器基于真实数据量和分布使用真实统计数据。所以,如果它很小,你可以在内存中创建它,那么创建它并真正测试它就足够便宜了。@GordonLinoff我一点也不奇怪-索引的必要性取决于应用程序,而这些应用程序并不总是DBA的主要关注点。。。从各种ORM等产生的动态SQL使这变得不容易。方法不错,但也请运行查询,仅比较执行计划的成本并不意味着查询执行得更好…这是否仍然会导致维护插入和更新索引的开销?非常感谢您的帮助,这是有用的信息。这是否仍然会导致维护插入和更新索引的开销?非常感谢您的帮助,这是有用的信息。