OrientDB - 索引
索引是指向数据库中数据位置的指针。索引是一种用于快速定位数据而不必搜索数据库中的每条记录的概念。OrientDB 支持四种索引算法,每种算法都有几种类型。
四种类型的索引是 −
SB-Tree 索引
它提供了其他索引类型提供的良好功能组合。最好将其用于一般用途。它耐用、事务性强并支持范围查询。它是默认索引类型。支持此算法的不同类型插件是 −
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 是在特定架构上创建索引的命令。
以下语句是创建索引的基本语法。
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