代码之家  ›  专栏  ›  技术社区  ›  Matt Briggs

非聚集索引会增加什么样的开销?

  •  2
  • Matt Briggs  · 技术社区  · 14 年前

    编辑 :为了进一步解释这背后的原因。。。

    现在,我肯定还有其他原因,或者我误会了什么。我知道冗余索引会有负面影响,我想知道的是它会有多糟糕(因为它似乎可以忽略不计)。整个索引每个字段的事情是一个最坏的情况,但我想,如果人们能告诉我这将对我的数据库造成什么影响,它将帮助我理解有关在索引方面保守,或只是在有可能帮助事情的时候把它们扔出去。

    3 回复  |  直到 14 年前
        1
  •  3
  •   gbn    14 年前

    胡思乱想

    • 当然,索引有利于阅读
    • 大多数数据库的95%读取(考虑更新、FK检查、重复检查等=读取)
    • “一切”毫无意义:大多数索引都需要与include组合
        2
  •  1
  •   KeithS    14 年前

    Introduction to Indices

    简而言之,一个索引,无论是聚集的还是非聚集的,都会向大多数当前dbms存储数据的“树”添加额外的“分支”。这使得使用索引对数时间(而不是线性时间)的单一唯一组合来查找值。访问时间的减少加速了数据库执行的许多常见任务;但是,当执行其他任务时,它可能会减慢速度,因为数据必须通过树访问。例如,基于非索引列的筛选需要引擎在树中迭代,并且由于分支节点(仅包含指向树中其他位置的指针)与叶节点的比率已降低,这将比不存在索引时花费更长的时间。

    此外,非聚集索引基于列值来分隔数据,但是如果这些列值在所有表行中不是非常唯一(比如一个表示“是”或“否”的标志),那么索引会增加额外的复杂性,实际上这对搜索没有帮助;事实上,它会阻碍搜索,因为在从树的根目录导航到树叶时,遇到一个额外的分支。

        3
  •  1
  •   Chris Shaffer    14 年前

    • 磁盘空间需求增加。
    • 增加了事务锁定开销(必须在事务内更新所有索引,导致需要更多锁,等等)。