2008-12-31 56 views
3

最近有几个关于数据库索引和聚集索引的问题,直到最近几个星期,它对我来说都是新鲜事物。我想知道它的重要性以及创建它们会带来怎样的性能提升。索引和聚集索引对数据库性能有多重要?

编辑:当你第一次出场时,在放入聚集索引时,通常需要注意什么是最佳类型的字段?

回答

10

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

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

编辑:基本上,聚簇索引通常应该有很短的长度。应该在反映范围的查询中创建它们。他们不应该有重复的条目。但是这些指导方针非常笼统,决不是正确的。正确的做法是分析将要执行的查询。仔细地对执行计划进行基准测试和分析,并了解执行计划的最佳方式。这需要多年的经验和知识,决不能用单个段落来解释。这是使数据库专家的专家最重要的东西(并不是唯一的东西,但对其他重要的东西,比如并发问题,可用性......)是很原始的!

+0

这也不为过,特别是对于有很多行的表格。它是表扫描和二进制排序之间的区别。对于一张20万行的表格来说,最大值为20万,而不是19次。 – ctacke 2008-12-31 16:38:40

+0

ctacke:非常真实。我更新了“非常”的数量以反映您的评论! – 2008-12-31 16:47:34

1

如果没有正确的索引,则强制RDBMS执行表扫描以查询任何内容。非常低效。

我也推断你没有主键,这是关系设计中的一个主要罪过。

2

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

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

聚类是值得思考的事情,我认为它真的取决于特定数据库的行为。如果您可以正确地对数据进行群集,则可以显着减少满足对不在内存中的行的请求所需的IOP数量。

1

当表格包含许多行时,索引是非常重要的。
有了几个rws,没有索引,性能会更好。
使用较大的表格索引对获得良好性能非常重要。
定义它们并不容易。聚集意味着数据以聚簇索引顺序存储。
为了获得索引的良好提示,您可以使用蟾蜍

1

索引是极其重要

查询的正确索引可以显着提高性能,所以它看起来像巫术

1

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

正如你可能从其他答案推断,聚集索引是不太重要。

体面索引为您提供一阶性能增益 - 数量级是常见的。

集群索引是一个二阶或增量性能增益 - 通常会给性能提高的百分比很小(< 100%)。 (我们也会遇到'什么是100%性能增益'的问题;我将这个百分比解释为((旧时间 - 新时间)/新时间)* 100,因此如果旧时间是10秒,并且新的时间是5秒,性能增加是100%。)

不同的DBMS对聚集索引意味着什么有不同的解释。谨防。 特别是,一些DBMS一次或多次对数据进行聚类,随着时间的推移,聚类会逐渐衰减,直到数据被重新聚合为止。我相信其他人对集群更积极。

0

聚集索引是通用的,但并不总是您的主要关键。查看聚集索引的一种方法是根据聚集索引的值将数据物理排序。

这很可能不会在现实中却refrencing聚集索引后容易让你以下的绩效奖金反正的情况:从一个聚集索引命中解决时

  1. 表中的所有列accessable免费就好像它们被包含在覆盖索引中一样。 (仅使用索引数据可解析查询,而不必参考表本身的数据页)

  2. 可以直接对聚簇索引进行更新操作,无需中间处理。如果你正在对表进行大量更新,那么你通常希望对集群列进行重新设置。

  3. 根据实施情况的不同,可能存在顺序访问权益,其中存储在磁盘上的数据通过更少的昂贵磁盘查找操作被更快地重新获取。

  4. 根据具体实施情况,可能会有自由索引权益,其中物理索引不是必需的,因为可以通过简单的猜测游戏算法解决数据访问问题。

不要指望#3,特别是#4。 #1和#2在大多数RDBMS平台上都是通用的安全投注。