OrientDB - 索引


索引是一个指针,指向数据库中数据的位置。索引是一个用于快速定位数据而无需搜索数据库中的每条记录的概念。OrientDB 支持四种索引算法以及每种算法中的多种类型。

四种类型的索引是 -

SB树索引

它提供了其他索引类型可用的功能的良好组合。最好将其用于一般用途。它是持久的、事务性的并且支持范围查询。它是默认索引类型。支持该算法的不同类型插件是 -

  • UNIQUE - 这些索引不允许重复的键。对于复合索引,这是指复合键的唯一性。

  • NOTUNIQUE - 这些索引允许重复的键。

  • FULLTEXT - 这些索引基于文本的任何单个单词。您可以通过CONTAINSTEXT运算符在查询中使用它们。

  • DICTIONARY - 这些索引与使用 UNIQUE 的索引类似,但在重复键的情况下,它们用新记录替换现有记录。

哈希索引

它执行速度更快,并且磁盘使用量非常少。它是持久的、事务性的,但不支持范围查询。它的工作原理类似于 HASHMAP,这使得准时查找速度更快,并且比其他索引类型消耗的资源更少。支持该算法的不同类型插件是 -

  • UNIQUE_HASH_INDEX - 这些索引不允许重复的键。对于复合索引,这是指复合键的唯一性。

  • NOTUNIQUE_HASH_INDEX - 这些索引允许重复的键。

  • FULLTEXT_HASH_INDEX - 这些索引基于文本的任何单个单词。您可以通过 CONTAINSTEXT 运算符在查询中使用它们。

  • DICTIONARY_HASH_INDEX - 这些索引与使用UNIQUE_HASH_INDEX 的索引类似,但在存在重复键的情况下,它们会用新记录替换现有记录。

Lucene 全文索引

它提供了良好的全文索引,但不能用于索引其他类型。它是持久的、事务性的,并且支持范围查询。

Lucene 空间索引

它提供了良好的空间索引,但不能用于索引其他类型。它是持久的、事务性的,并且支持范围查询。

创建索引

创建索引是在特定模式上创建索引的命令。

以下语句是创建索引的基本语法。

CREATE INDEX <name> [ON <class-name> (prop-names)] <type> [<key-type>] 
[METADATA {<metadata>}]

以下是有关上述语法中的选项的详细信息。

<name> - 定义索引的逻辑名称。您还可以使用 <class.property> 表示法创建绑定到架构属性的自动索引。<class> 使用架构的类,<property> 使用在类中创建的属性。

<class-name> - 提供您要创建自动索引的类的名称。该类必须存在于数据库中。

<prop-names> - 提供您希望自动索引索引的属性列表。这些属性必须已存在于架构中。

<type> - 提供您要创建的索引的算法和类型。

<key-type> - 提供带有自动索引的可选键类型。

<metadata> - 提供 JSON 表示。

例子

尝试以下查询来创建绑定到用户 sales_user 的属性“ID”的自动索引。

orientdb> CREATE INDEX indexforID ON sales_user (id) UNIQUE

如果上述查询执行成功,您将得到以下输出。

Creating index... 
Index created successfully with 4 entries in 0.021000 sec(s)

查询索引

您可以使用选择查询来获取索引中的记录。

尝试以下查询来检索名为“indexforId”的索引的键。

SELECT FROM INDEX:indexforId 

如果上述查询执行成功,您将得到以下输出。

----+------+----+----- 
#   |@CLASS|key |rid   
----+------+----+----- 
0   |null  |1   |#11:7 
1   |null  |2   |#11:6 
2   |null  |3   |#11:5 
3   |null  |4   |#11:8 
----+------+----+-----

删除索引

如果要删除特定索引,可以使用此命令。此操作不会删除链接记录。

以下语句是删除索引的基本语法。

DROP INDEX <name>

其中<name>提供要删除的索引的名称。

尝试以下查询来删除用户 sales_user 的名为“ID”的索引。

DROP INDEX sales_users.Id 

如果上述查询执行成功,您将得到以下输出。

Index dropped successfully