有什么不同类型的索引,有什么好处?
-
02-07-2019 - |
题
有什么不同类型的索引,有什么好处?
我听到的复盖和集群的索引,还有更多吗?在那里你会用他们吗?
解决方案
- 唯一的担保的唯一值列(或列集)包括在索引
- 复盖包括所有列用于特定的查询(或组查询),允许数据库使用指数和实际上没有看表数据检索结果
- 聚集这种方式是在其实际数据是有序的磁盘上,这意味着如果查询使用的群集的指标,用于查找的价值观,它没有采取额外步骤的实际表行为的任何数据不包括索引。
其他提示
正如文章中所述:
适当的指数对善意至关重要 大型数据库中的性能。 有时你可以弥补一个不好的 带有良好索引的书面查询,但是 它可能很难弥补穷人 使用最好的查询进行索引。
也是如此......如果你刚刚开始使用它,我会专注于聚簇和复合索引,因为它们可能是你最常用的。
我会添加几种索引类型
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
查看索引的类型及其含义访问: https://msdn.microsoft.com/en-us/library/ms175049.aspx