什么时候在表上没有索引可能有意义?

时间:2016-04-20 00:10:33

标签: oracle

对于Oracle和相对于应用程序调优,何时在表上没有索引以及为什么有意义?

3 个答案:

答案 0 :(得分:4)

拥有索引会产生相关成本:

  • 占用磁盘空间
  • 它减慢了更新速度(索引也需要更新)
  • 它使查询计划更复杂(稍慢,但更重要的是增加了错误决策的可能性)

这些成本应该被更高效的查询处理(更快,更少的I / O)的好处所抵消。

如果索引的使用不足以证明成本合理,那么索引将为负数。

答案 1 :(得分:2)

特别是,如果您的数据分布很低(想想'Y'和'N'之类的标记),索引将无济于事。可以这样想:如果索引中的不同值的数量很少,优化器可能会选择不使用索引。有趣的是,如果索引中的列为null,如果查询条件包含实际值,则可能会快得多,因为空值未被索引,这意味着只有实际值(非null)在该特定索引中,从而不评估表中的大多数行。在“is null”的情况下,它永远不会使用索引 - 如果你有一个带有“where”子句的查询,比如“mytable.mycolumn is null”,那么放弃所有在这里输入的索引。

答案 2 :(得分:1)

如果一个表的数据非常少(行数很少),那么它就无法使用索引。索引可以快速搜索特定属性,如果您正在使用的应用程序不需要快速查找,那么使用索引对您来说很少。