首页 > 解决方案 > 索引与完整扫描,我如何确定使用哪个以及何时使用

问题描述

是否有关于何时使用完整扫描而不是索引的经验法则?我是甲骨文的新手,但我仍在努力将注意力集中在性能调优上。谢谢!

标签: oracle

解决方案


优化器的目的是为您做出这些决定。当然它并不总是正确的,但通常我会让优化器为我完成所有繁重的工作,只担心它出错的问题,我不得不“干预”可以这么说。

但就全扫描与索引而言,我鼓励您不要用这些术语来思考,仅仅因为您的客户和您的应用程序不在乎。客户关心的是响应时间,所以这里的驱动因素应该始终是响应时间。

如果对于查询 1,完全扫描比索引扫描,那么完全扫描是更好的选择。与索引扫描相比,这并不能使完整扫描“始终”或以某种方式“哲学上”或“技术上”更好。它只是意味着对于这个查询,最好是完全扫描。

如果对于另一个查询,索引更好,那么无论如何,我们应该使用索引。

通常会在书籍和博客文章中看到建议,说“在计划中查找 TABLE ACCESS FULL - 这很糟糕”,等等。我认为那是BS。无论执行计划如何为您的查询提供最佳性能,都是最好的……无论它使用索引扫描、完整扫描还是任何其他形式的优化器路径。

如果您想更全面地了解 SQL 调优,我在这里写了一个由四部分组成的系列https://connor-mcdonald.com/2019/10/24/the-holistic-sql-tuning-series/


推荐阅读