什么时候表上没有索引才有意义?为什么



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

有一个与索引相关的成本:

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

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

如果该指数没有被充分用来证明成本的合理性,那么拥有该指数将是负的。

特别是,如果您的数据分布很低(比如'Y'和'N'之类的标志),索引不会有多大帮助。这样想:如果索引中不同值的数量很低,优化器可能会选择不使用该索引。有趣的一点是,如果索引中的列为null,那么如果查询条件包括实际值,则速度可能会快得多,因为null没有索引,这意味着只有实际值(非null)在该特定索引中,因此不会评估表中的大多数行。在"为null"的情况下,它永远不会使用索引-如果您有一个带有"where"子句的查询,如"where mytable.mycolumn为null",请放弃在此处输入的所有索引。

如果一个表的数据很少(行数很少),那么就不需要使用索引。索引可以快速搜索特定属性,如果您正在使用的应用程序不需要快速查找,那么使用索引对您几乎没有帮助。

最新更新