微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何强制oracle使用索引范围扫描?

我有一系列非常相似的查询,我针对14亿条记录(带索引)的表格,唯一的问题是至少有10%的查询使用>比其他人执行时间要多100倍.

我运行了一个解释计划,并注意到,对于快速查询(大约90%),Oracle正在使用索引范围扫描;在慢速扫描中,它使用完整的索引扫描.

有没有办法强制Oracle进行索引范围扫描?

我建议采用以下方法

>在缓慢的声明上获得解释计划
>使用INDEX提示,获取使用索引的说明计划

您会注意到INDEX计划的成本更高.这就是为什么Oracle没有选择索引计划.成本是Oracle根据其统计数据和各种假设进行的估计.

如果计划的估计成本较高,但实际运行速度更快,那么估计是错误的.你的工作就是弄清楚为什么估计是错误的,正确的.那么甲骨文将选择正确的计划,这个声明和其他人就是自己的.

为了弄清楚为什么这是错误的,看看计划中预期的行数.你可能会发现其中一个一个数量级的.这可能是由于不均匀分布的列值,旧统计信息,彼此组合的列等.

解决这个问题,您可以让Oracle收集更好的统计信息,并提供更好的开始假设.然后,它将估计准确的成本,并提出最快的计划.

如果您发布更多信息,我可能会进一步评论.

原文地址:https://www.jb51.cc/oracle/205436.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐