数据仓库主要用来进行OLAP任务,区别于传统的OLTP数据库,数据仓库对数据吞吐量的要求更高.
现在很多数据仓库都是列式数据库,比如infobright,Sybase IQ等.
前一段时间进行了一下对这些列式数据库的研究,发现了它们很多不同于传统行式数据库的特点.下面简单谈一下这些列式数据库中使用的索引.
1 块级粗粒度索引
顾名思义,就是把数据分块,对块建立索引而不是对条目建立.块级索引一般都是粗粒度的.下图就是infobright的块级索引示意图.
可以看出,它每个数据块的块索引记录该块数据的最大值和最小值,这样查询时,根据条件,就可以判断符合条件的数据是否命中该数据块,而且,如果进行max,sum等聚合操作,可以直接从块索引读取数据而不用读取块内数据.
无独有偶,hive的ORC file也采用了相似的存储格式
2 reduced B+树
B+树大家都很熟悉,但是用在OLTP数据库中的B+树,因为数据需要频繁更新插入,在B+树数据块中往往需要留有冗余空间,用来防止B+树的节点空间不足导致B+树的分裂.而列式数据库因为一般都是批量导入数据,数据插入更新操作少,所以可以在导入数据时用自底向上的方法创建B+树,同时可以缩小B+树数据块中的冗余空间,使得B+树更加紧凑.
3 位图索引
位图索引一般建立在列的cardinality比较低的情况下.比如性别属性只有男和女,那么这个列的cardinality就是2.这样的列适合用来建立位图索引
4 sybase的一种位图索引
从上面可以看出,位图索引一般用来存储cardinality比较小的数据,而且往往不能进行范围查找,比如大于小于之类.不过sybase有一项专利,用位向量存储索引,仍然可以支持大于运算符
有兴趣的同学可以读一下这篇专利
Method and apparatus for indexing database columns with bit vectors,把它的方法告诉大家
- 大小: 24.1 KB
- 大小: 142.1 KB
- 大小: 32.5 KB
- 大小: 35.4 KB
分享到:
相关推荐
为了解决行式存储中的问题,另一种索引技术—位图索引被引入。位图索引使用位图来表示数据的存储状态,尤其适用于具有高基数的列。位图索引可以大大减少存储空间,并且在执行选择性较高的查询时效率很高。 #### 七...
列式数据库的研究 ...随着列式数据库的发展和应用,更多的厂商加入了列式数据库的研发队伍中来,包括Oracle、Vertica、Infobright等公司。列式数据库的发展是必然的,是一个趋势,大家正在逐渐认可列式数据库。
1. **FP索引**:FP索引是一种针对列式存储设计的索引结构,它能够有效地支持对特定列的查询操作。 - **存储细节**:FP索引可以分为FP1、FP2、FP3和flatFP等不同类型。通过存储替换值的方式来实现数据的压缩和等宽...
数据库索引主要有以下几种类型:B树索引(包括B+树)、哈希索引、全文索引、空间索引等。其中,B树索引是最常见的,适用于范围查询和顺序扫描;哈希索引适用于等值查询,但不支持范围查询;全文索引则专门用于文本...
B树是一种自平衡的树数据结构,广泛应用于数据库索引中。在B树中,每个节点最多包含一定数量的子节点,这使得树的高度较低,从而减少了查找次数。例如,在查找 `id = 44` 的记录时,可以通过B树结构快速定位到目标...
非聚集索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表可以包含多个非聚集索引。 ### MySQL 索引的分类 MySQL 索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引。 #### 普通...
Oracle 8i 支持几种不同类型的索引以满足许多类型的应用程序的需求,其中包括 B-树(标准)索引、反向键索引、位图索引、索引编排表和基于函数的索引。这些索引都是基于表列创建的各种类型的索引。 (1)标准(B-树...
通过创建唯一性索引,可以确保数据库表中每一行数据在特定列上的值是唯一的,这对于维护数据的完整性和避免重复数据至关重要。 #### 3. 加速表间连接 索引有助于加速表与表之间的连接操作,尤其是在实施数据的参考...
数据库索引是数据库管理系统中用于加速数据检索的一种数据结构,它的设计目的是为了提高查询效率,减少数据访问的时间。本文将深入探讨数据库索引的概念、B-Tree数据结构以及索引的分类和作用。 首先,B-Tree是...
索引是在数据库表的一个或多个列上创建的数据结构,类似于书籍中的目录,可以显著加快数据检索速度。当执行查询时,数据库管理系统会根据查询条件决定是否使用索引以及使用哪个索引。 #### 2. 为何需要屏蔽索引? ...
在Oracle数据库中,B-tree索引是一种常用的索引类型,特别是在Oracle8i版本中。B-tree索引基于二叉树数据结构,能够高效地支持等值查找、范围查找和排序操作。这种索引的主要特点是其分层结构,使得数据访问速度较快...
索引是数据库中一种用于快速查找数据的数据结构。在Oracle数据库中,最常用的索引类型是B树索引(B-tree index),它支持范围查询和精确匹配查询。此外,还有其他类型的索引如位图索引、散列索引等,但B树索引因其...
数据库索引主要有以下几种类型: 1. 主键索引:这是唯一索引,确保索引字段的值在表中是唯一的。主键索引不允许有空值,并且一个表只能有一个主键。 2. 唯一索引:与主键索引类似,它也确保索引字段的值唯一,但并...
5. **使用覆盖索引**:覆盖索引是指索引包含了查询所需的所有列,这样查询可以直接从索引中获取数据,无需回表,大大提高查询效率。 在进行数据分页时,可以利用SQL Server的`OFFSET/FETCH`或`TOP/LIMIT`语法配合...
聚集索引可以提高查询速度,因为它可以直接从索引中获取数据,而非聚集索引需要从数据表中获取数据。 索引的应用场景 ----------------- 索引的应用场景非常广泛,例如: * 快速查询:索引可以帮助快速地定位和...
出现该错误的原因可能有以下几种情况: 1. **数据库结构损坏**:数据库文件(如 `.mdf` 或 `.ndf` 文件)可能由于硬盘故障、电源问题或其他硬件故障而受损。 2. **元数据不一致**:由于某些未正常关闭的操作导致的...
Oracle 数据库中的位图索引是一种特殊类型的索引,主要用于解决查询优化问题。 在实际应用中,列值重复率高的情况非常常见,使用 B 树索引效果不佳。在这种情况下,位图索引就成了不二之选。位图索引可以快速定位...
索引是数据库表中一列或多列的值的集合,可以快速访问表中的特定信息。索引的目的是加快对数据的检索速度,而不需要扫描整个表。然而,并非所有情况下索引都是最优选择。索引的创建和维护都需要成本,它会消耗存储...