代码之家  ›  专栏  ›  技术社区  ›  Josh Mein

索引和集群索引对数据库性能有多重要?

  •  3
  • Josh Mein  · 技术社区  · 16 年前

    最近有几个关于数据库索引和集群索引的问题,直到最近几周对我来说还是一个新问题。我想知道它有多重要,创建它们可以带来什么样的性能提升。

    当您第一次开始创建聚集索引时,通常要查看的最佳字段类型是什么?

    7 回复  |  直到 15 年前
        1
  •  10
  •   Mehrdad Afshari    16 年前

    非常非常 A G G ) 重要的 . 在我看来,明智的索引是数据库性能优化中绝对最重要的事情。

    这不是一个简单的问题,在一个单一的答案涵盖。好的索引需要了解数据库上将要发生的查询,进行大量权衡,并理解特定数据库引擎中特定索引的含义。但这是非常重要的。

    基本上,聚集索引通常应该具有较短的长度。它们应该在反映范围的查询上创建。它们不应该有重复的条目。但这些指导方针非常笼统,绝不是正确的。正确的做法是分析将要执行的查询。仔细地对执行计划进行基准测试和分析,并了解执行计划的最佳方式。这需要多年的经验和知识,决不是一段话就能解释的。这是使DB专家成为专家的主要因素(这不是唯一的因素,但它对于其他重要因素来说是原始的,例如并发性问题、可用性等等)!

        2
  •  2
  •   MarkR    16 年前

    索引:非常重要。索引错误会使查询更加困难,有时甚至无法在合理的时间内完成。

    索引还会影响插入性能和磁盘使用率(负面),因此在大型表上保留大量多余的索引也是一个坏主意。

    集群是一个值得考虑的问题,我认为它实际上取决于特定数据库的行为。如果可以正确地对数据进行集群,则可以显著降低满足对不在内存中的行的请求所需的IOPs量。

        3
  •  1
  •   duffymo    16 年前

    我还推断您没有主键,这是关系设计中的一个主要缺点。

        4
  •  1
  •   Kb.    16 年前

    当表包含许多行时,索引非常重要。

    对于较大的表,索引对于获得良好的性能非常重要。
    要定义它们并不容易。聚集表示数据以聚集索引顺序存储。

        5
  •  1
  •   Garry Shutler    16 年前

    索引是 至关重要的

    正确的查询索引可以极大地提高性能 巫术

        6
  •  1
  •   Jonathan Leffler    16 年前

    正如其他答案所说,索引是至关重要的。

    正如您可能从其他答案中推断的那样,集群索引的重要性要小得多。

    适当的索引可以让您获得一阶性能增益——数量级是常见的。

    集群索引是一种二阶或增量性能提升—通常会带来较小的(<100%)性能提升百分比。

    (我们还遇到了“什么是100%的性能提升”的问题;我将这个百分比解释为((oldtime-newtime)/newtime)*100,因此如果旧时间是10秒,新时间是5秒,性能提升是100%。)

    特别是,一些DBMS会对数据进行一次聚类,然后,聚类会随着时间的推移而衰减,直到重新对数据进行聚类。我相信,其他人对集群持更积极的观点。

        7
  •  0
  •   Einstein    16 年前

    聚集索引通常是主键,但并不总是主键。查看聚集索引的一种方法是根据聚集索引的值对数据进行物理排序。

    事实上可能并非如此,但重新引用聚集索引通常会为您带来以下性能奖励:

    1. 当从聚集索引命中解析时,表的所有列都可以免费访问,就像它们包含在覆盖索引中一样。(仅使用索引数据即可解析的查询,无需引用表本身的数据页)

    2. 可以直接对聚集索引执行更新操作,而无需中间处理。如果要对一个表进行大量更新,通常需要重新引用聚集列。

    不要指望第三个,尤其是第四个#在大多数RDBMS平台上,1和#2通常是安全的赌注。