3

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

编辑:当您第一次开始时放入聚集索引时,通常最好查看的字段类型是什么?

4

7 回答 7

10

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

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

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

于 2008-12-31T16:35:58.650 回答
2

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

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

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

于 2008-12-31T16:40:07.033 回答
1

如果没有适当的索引,您将强制 RDBMS 进行表扫描以查询任何内容。效率极低。

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

于 2008-12-31T16:37:23.840 回答
1

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

于 2008-12-31T16:42:51.100 回答
1

索引非常重要

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

于 2008-12-31T16:43:57.963 回答
1

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

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

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

聚集索引是二阶或增量性能增益 - 通常会提供较小 (<100%) 的性能提升百分比。

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

不同的 DBMS 对聚集索引的含义有不同的解释。谨防。特别是,一些 DBMS 对数据进行一次聚类,之后聚类会随着时间的推移而衰减,直到数据被重新聚类。我相信,其他人对集群的看法更为积极。

于 2008-12-31T18:35:00.907 回答
0

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

实际情况可能并非如此,但是引用聚集索引通常会为您带来以下性能奖励:

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

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

  3. 根据实现的不同,可能会有顺序访问的好处,其中存储在磁盘上的数据可以通过更少的昂贵磁盘查找操作更快地检索。

  4. 根据实施情况,在不需要物理索引的情况下,可能会有免费索引优势,因为可以通过简单的猜谜游戏算法来解决数据访问问题。

不要指望#3,尤其是#4。#1 和 #2 在大多数 RDBMS 平台上通常是安全的选择。

于 2008-12-31T19:08:21.743 回答