2016-04-20 38 views

回答

1

如果一个表的数据非常少(少量的行),那么它不会为您使用索引。索引使得它能够快速搜索特定属性,并且您正在使用的应用程序不需要快速查找,那么使用索引对您而言几乎没有任何作用。

+0

非常感谢你这么多! –

+0

您会惊讶于小桌子上的索引如何产生重大影响,例如如果表格被非常频繁地查询。完整索引扫描可能只需要读取1个块,而读取表格则需要读取至少2个块。 –

4

有关联到其索引的成本:

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

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

如果索引不足以证明成本合理,则索引将为负数。

2

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

相关问题