官术网_书友最值得收藏!

3.5 索引

3.5.1 簡介

數(shù)據(jù)庫索引是為了提升搜索效率而創(chuàng)建的某些數(shù)據(jù)的特殊冗余,以額外的存儲空間和寫操作為代價。確定索引數(shù)據(jù)的范圍,是一項重要且有一定難度的工作。Neo4j的索引由DBMS管理和更新,一旦創(chuàng)建并生效,Neo4j將自動選擇并使用。

3.5.1.1 索引類型

Neo4j支持以下類型的索引:

● b樹索引(b-tree):Cypher可以為擁有指定標(biāo)簽的所有節(jié)點(diǎn),或擁有指定關(guān)系類型的所有關(guān)系,建立基于單個或多個屬性的b樹索引?;诮o定標(biāo)簽或關(guān)系類型在單個屬性上創(chuàng)建的索引稱為單屬性索引?;诮o定標(biāo)簽或關(guān)系類型在多個屬性上創(chuàng)建的索引稱為復(fù)合索引。

● 全文索引(fulltext):詳見3.6節(jié)。

● 查找索引(lookup):查找索引只依賴節(jié)點(diǎn)標(biāo)簽或關(guān)系類型,不考慮屬性。

● 文本索引(text):文本索引是一種單屬性索引,但只能用于字符串類型的屬性。如果節(jié)點(diǎn)的標(biāo)簽或關(guān)系的關(guān)系類型不是字符串型,則這些節(jié)點(diǎn)和關(guān)系就不能被索引。

3.5.1.2 索引使用建議

使用索引有如下建議:

● 創(chuàng)建索引時明確其名稱。如果沒有命名,則數(shù)據(jù)庫會為索引會自動生成名稱。

● 索引的名稱必須在索引和約束中同時保持唯一。

● 默認(rèn)情況下,索引不能重復(fù)創(chuàng)建,兩次創(chuàng)建相同的索引會報錯。使用IF NOT EXISTS子句可以避免這種報錯。

3.5.1.3 復(fù)合索引

復(fù)合b樹索引同單屬性b樹索引一樣,能支持所有的判斷式:

● 等值判斷:n.prop = value。

● 列表成員判斷:n.prop IN list。

● 存在判斷:n.prop IS NOT NULL。

● 范圍搜索:n.prop > value。

● 前綴判斷:STARTS WITH。

● 后綴判斷:ENDS WITH。

● 子串搜索:CONTAINS。

判斷式可能會被執(zhí)行計劃(Execution Plan)優(yōu)化為存在檢查和過濾器,為了避免這種情況,判斷式需要遵循以下限制規(guī)則:

● 如果有任何等值檢查和列表成員判斷,它們需要用于索引定義的第一個屬性。

● 最多可以有一個范圍判斷或前綴判斷。

● 可以有任意數(shù)量的存在判斷式。

● 范圍判斷、前綴判斷或存在判斷后的判斷式必須為存在判斷。而前綴判斷和子串判斷總是被調(diào)整為存在判斷式和過濾器,因此其后的所有判斷式也被調(diào)整為存在判斷式。

例如,一個索引基于標(biāo)簽Label(prop1,prop2,prop3,prop4,prop5,prop6)的節(jié)點(diǎn)而建立,其判斷式如下:

因為n.prop3有一個range search判斷式,所以將被規(guī)劃為以下判斷式和過濾器n.prop4 < 'e'和n.prop5 = true:

又如,一個索引基于標(biāo)簽:Label(prop1,prop2)的節(jié)點(diǎn)而建立,其判斷式如下:

因為n.prop1有一個前綴判斷式,所以將被規(guī)劃為以下判斷式和過濾器n.prop1 ENDS WITH 'x'和n.prop2 = false。

復(fù)合索引所有被索引的屬性都需要判斷式,如果只有一部分屬性使用了判斷式,復(fù)合索引就不能被使用。要想在這種情況下使用索引,就要在相關(guān)的屬性上單獨(dú)創(chuàng)建額外的索引。

主站蜘蛛池模板: 临泽县| 广州市| 玉山县| 额济纳旗| 平武县| 出国| 孟州市| 临洮县| 洛南县| 寿宁县| 永新县| 高台县| 永德县| 永济市| 绥化市| 荔浦县| 基隆市| 肇州县| 临夏市| 商河县| 石楼县| 疏附县| 绥江县| 长海县| 蒙山县| 茌平县| 保靖县| 潢川县| 普定县| 临潭县| 友谊县| 柘城县| 淮北市| 连州市| 修武县| 孝昌县| 孝义市| 桓仁| 简阳市| 石柱| 茶陵县|