【索引】反向索引

1,Creating data
Reversed key indexes use b-tree structures, but preprocess key values before inserting them. Simplifying, b-trees place similar values on a single index block, e.g., storing 24538 on the same block as 24539. This makes them efficient both for looking up a specific value and for finding values within a range. However if the application inserts values in sequence, each insert must have access to the newest block in the index in order to add the new value. If many users attempt to insert at the same time, they all must write to that block and have to get in line, slowing down the application. This is particularly a problem in clustered databases, which may require the block to be copied from one computer's memory to another's to allow the next user to perform. their insert.

Reversing the key spreads similar new values across the entire index instead of concentrating them in any one leaf block. This means that 24538 appears on the same block as 14538 while 24539 goes to a different block, eliminating this cause of contention. (Since 14538 would have been created long before 24538, their inserts don't interfere with each other.)

2,Querying data
Reverse indexes are just as effective as for finding specific values, although they aren't helpful for range queries, which turn out to be uncommon for artificial values such as sequence numbers. When searching the index, the query processor simply reverses the search target before looking it up.

3,Deleting data
Another benefit impacts applications that delete data. Typically, applications delete data that is older on average (with lower values of the sequence) before deleting newer data. In standard b-trees, many index blocks end up containing few values, with a commensurate increase in unused space, referred to as "rot". Rot not only wastes space, but slows query speeds, because a smaller fraction of a rotten index's blocks fit in memory at any one time. In a b-tree, if 14538 gets deleted, its index space remains empty. In a reverse index, if 14538 goes before 24538 arrives, 24538 can reuse 14538's space.

时间: 2024-10-28 18:51:34

【索引】反向索引的相关文章

【索引】反向索引--条件 范围查询

---查看索引的类型 SQL> col table_name for a10 SQL> col index_name foa a10SQL> select table_name ,index_name ,index_type from user_indexes where table_name in ('T1','T2'); TABLE_NAME INDEX_NAME                     INDEX_TYPE ---------- ------------------

【索引】反向索引引起排序

   反向索引是B*Tree索引的一个分支,它的设计是为了运用在某些特定的环境下的.Oracle推出它的主要目的就是为了降低在并行服务器(Oracle Parallel Server)环境下索引叶块的争用.当B*Tree索引中有一列是由递增的序列号产生的话,那么这些索引信息基本上分布在同一个叶块,当用户修改或访问相似的列时,索引块很容易产生争用.反向索引中的索引码将会被分布到各个索引块中,减少了争用.也是由于索引被散布在不同的索引块中,会引起不必要的排序. SQL> create table t

oracle点知识7——本地索引+全局索引

以下内同整理自网络: 分区索引分为本地(local index)索引和全局索引(global index). 1.本地索引: 其中本地索引又可以分为有前缀(prefix)的索引和无前缀(nonprefix)的索引.而全局索引目前只支持有前缀的索引. B*树索引和位图索引都可以分区,但是HASH索引不可以被分区.位图索引必须是本地索引(也就是说必须分区).下面就介绍本地索引以及全局索引各自的特点来说明区别: 本地索引特点: 1. 本地索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区

软件开发人员真的了解SQL索引吗(索引使用原则)

原文:软件开发人员真的了解SQL索引吗(索引使用原则)     前两篇文章我总结了一些SQL数据库索引的问题,这篇主要来分析下索引的优缼点,以及如何正确使用索引.       索引的优点:这个显而易见,正确的索引会大大提高数据查询,对结果进行排序.分组的操作效率.    索引的缺点:优点显而易见,同样缺点也是显而易见:    1:创建索引需要额外的磁盘空间,索引最大一般为表大小的1.2倍左右.    2:在表数据修改时,例如增加,删除,更新,都需要维护索引表,这是需要系统开销的.    3:不合

SQL Server 数据库索引其索引的小技巧_MsSql

一.什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用[索引] 索引允许SQL Server在表中查找数据而不需要扫描整个表. 1.1.索引的好处: 当表没有聚集索引时,成为[堆或堆表] [堆]是一堆未加工的数据,以行标识符作为指向存储位置的指针.表数据没有顺序,也不能搜索,除非逐行遍历.这个过程称为[扫描].当存在聚集索引时,非聚集索引的指针由聚集索引所定义的值组成,所以聚集索引变得非常重要. 因为页面大小固定,所以列越少,所能存储的行就越多.由于非聚集索引通常不包含所有列,所以一般

mysql创建索引与索引删除

本文章要来讲关于mysql教程创建索引与索引删除哦,本教程只讲关于mysql 5.0支持的索引类型,并简单介绍索引的设计原创,索引是数据库教程中用来提高性能的最常用的工具. 一. 所有mysql索引列类型都可以被索引,对来相关类使用索引可以提高select查询性能,根据mysql索引数,可以是最大索引与最小索引,每种存储引擎对每个表的至少支持16的索引.总索引长度为256字节. mysim和innodb存储引擎的表默认创建索引都是btree索引,目前mysql还不支持函数索引,但支持前缘索引,对

聚集索引,非聚集索引,唯一索引,索引视图

聚集索引对于从表中检索一定范围的数据值非常有用.非聚集索引最适于检索特定行,而聚集索引最适于检索一定范围的行.但是,由于每个表只允许使用一个聚集索引,因此按照这个简单的逻辑来确定要创建哪种类型的索引并不总能成功.对于该问题有一个简单的物理原因.对于聚集索引 B 树结构的上部(非叶层),如果像对它们的非聚集索引部分那样组织,则聚集索引的底层由表的实际 8 KB 数据页组成.但这种情况有一个例外,那就是在视图的基础上创建聚集索引时.因为将在下面介绍索引视图,所以我们将讨论针对实际表创建的聚集索引.在

MySQL前缀索引和索引选择性

MySQL前缀索引和索引选择性 有时候需要索引很长的字符列,这会让索引变得大且慢.通常可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率.但这样也会降低索引的选择性.索引的选择性是指不重复的索引值(也称为基数,cardinality)和数据表的记录总数的比值,范围从1/#T到1之间.索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更多的行.唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的. 一般情况下某个前缀的选择性也是足够高的,足以满足

SQL Server 数据库索引其索引的小技巧

一.什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用[索引] 索引允许SQL Server在表中查找数据而不需要扫描整个表. 1.1.索引的好处: 当表没有聚集索引时,成为[堆或堆表] [堆]是一堆未加工的数据,以行标识符作为指向存储位置的指针.表数据没有顺序,也不能搜索,除非逐行遍历.这个过程称为[扫描].当存在聚集索引时,非聚集索引的指针由聚集索引所定义的值组成,所以聚集索引变得非常重要. 因为页面大小固定,所以列越少,所能存储的行就越多.由于非聚集索引通常不包含所有列,所以一般