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 <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)

查詢索引

可以使用select查詢語句來獲取索引中的記錄。

嘗試以下查詢以檢索名為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