有什么不同类型的索引,有什么好处?

我听到的复盖和集群的索引,还有更多吗?在那里你会用他们吗?

有帮助吗?

解决方案

  • 唯一的担保的唯一值列(或列集)包括在索引
  • 复盖包括所有列用于特定的查询(或组查询),允许数据库使用指数和实际上没有看表数据检索结果
  • 聚集这种方式是在其实际数据是有序的磁盘上,这意味着如果查询使用的群集的指标,用于查找的价值观,它没有采取额外步骤的实际表行为的任何数据不包括索引。

其他提示

OdeToCode有一篇很好的文章介绍了基本的差异

正如文章中所述:

  

适当的指数对善意至关重要   大型数据库中的性能。   有时你可以弥补一个不好的   带有良好索引的书面查询,但是   它可能很难弥补穷人   使用最好的查询进行索引。

也是如此......如果你刚刚开始使用它,我会专注于聚簇和复合索引,因为它们可能是你最常用的。

我会添加几种索引类型

BITMAP - 当您的可能值非常少时,非常快且不占用太多空间

PARTITIONED - 允许根据某些属性对索引进行分区,这些属性通常对非常大的数据库对象有利,这是出于存储或性能原因。

FUNCTION / EXPRESSION索引 - 用于根据表预先计算一些值并将其存储在索引中,一个非常简单的示例可能是基于lower()或子串函数的索引。

PostgreSQL允许部分索引,其中只有与谓词匹配的行被索引。例如,您可能希望仅为那些处于活动状态的记录索引customer表。这可能类似于:

create index i on customers (id, name, whatever) where is_active is true;

如果您的索引有很多列,并且您有许多非活动客户,那么就空间而言这可能是一个巨大的胜利(索引将存储在更少的磁盘页面中),从而提高性能。要命中索引,您至少需要指定谓词:

select name from customers where is_active is true;

传统的智慧表明,指标的选择应该根据基数。他们会说,

对于一个 低基数 列如性别、使用图。对于一个 高基数 像LAST_NAME,使用b-树。

这个不是这种情况与Oracle, ,指标的选择应该基于应用程序的类型(只读与OLAP).仔细表上有位图的索引可能导致严重的锁竞争。另一方面,Oracle社区组织可以很容易地结合起来的多位指数在一起,位图的索引可以使用的搜索空。作为一般规则:

对于一个 只读 系统与经常仔细和程序的查询,利用b树.对于一个 OLAP 系统不经常仔细和特别查询,使用位图。

我不知道,如果这适用于其他数据库,评论是值得欢迎的。下文讨论这个问题进一步:

不同的数据库系统对于相同类型的索引具有不同的名称,因此请小心。例如,SQL Server和Sybase所谓的“聚簇索引”是什么?在Oracle中称为“索引组织表”。

我建议你搜索Jason Massie的博客( http://statisticsio.com/ )和Brent Ozar ( http://www.brentozar.com/ )了解相关信息。他们有一些关于处理索引的真实场景的帖子。

Oracle有各种b-tree,位图,分区和非分区,反向字节,位图连接和域索引的组合。

以下是有关该主题的11gR1文档的链接: http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

<01>
  • 独特
  • cluster
  • 非群集
  • 专栏店
  • 包含列的索引
  • 计算列的索引
  • 过滤
  • 空间
  • xml
  • 全文
  • SQL Server 2008 过滤索引,类似于PostgreSQL的部分索引。两者都允许仅在索引中包含与指定条件匹配的行。

    语法与PostgreSQL相同:

    create index i on Customers(name) where is_alive = cast(1 as bit);
    

    查看索引的类型及其含义访问: https://msdn.microsoft.com/en-us/library/ms175049.aspx

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