最近有几个关于数据库索引和聚簇索引的问题,直到最近几周它才对我有所帮助。我想知道它的重要性以及创建它们可以带来什么样的性能提升。

编辑:首次投放聚集索引时,通常最好看的字段类型是什么?

有帮助吗?

解决方案

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

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

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

其他提示

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

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

群集是值得思考的问题,我认为它实际上取决于特定数据库的行为。如果可以正确地对数据进行集群,则可以显着减少满足非内存行请求所需的IOP数量。

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

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

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

索引非常重要

查询的正确索引可以极大地提高性能,看起来像巫术

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

正如您可能从其他答案推断的那样,聚集索引不那么重要。

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

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

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

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

聚集索引通常但不总是您的主键。查看聚簇索引的一种方法是根据聚簇索引的值来考虑物理排序的数据。

实际上情况可能并非如此,但是通过重新注册聚集索引通常会获得以下性能奖励:

  1. 从聚簇索引命中解析时,表的所有列都可以免费访问,就好像它们包含在覆盖索引中一样。 (只使用索引数据可以解析的查询,而不必参考表本身的数据页)

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

  3. 根据实施情况,可能存在顺序访问权益,可以通过较少的昂贵磁盘搜索操作更快地检索存储在磁盘上的数据。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top