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)建額外的索引。
- Microsoft SQL Server企業(yè)級平臺管理實(shí)踐
- SQL Server 2008數(shù)據(jù)庫應(yīng)用技術(shù)(第二版)
- 卷積神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)
- 工業(yè)大數(shù)據(jù)分析算法實(shí)戰(zhàn)
- 數(shù)據(jù)驅(qū)動:從方法到實(shí)踐
- 數(shù)據(jù)庫原理與應(yīng)用(Oracle版)
- Spark大數(shù)據(jù)分析實(shí)戰(zhàn)
- Starling Game Development Essentials
- ZeroMQ
- SQL優(yōu)化最佳實(shí)踐:構(gòu)建高效率Oracle數(shù)據(jù)庫的方法與技巧
- 科研統(tǒng)計思維與方法:SPSS實(shí)戰(zhàn)
- Python數(shù)據(jù)分析與數(shù)據(jù)化運(yùn)營
- Power BI智能數(shù)據(jù)分析與可視化從入門到精通
- SIEMENS數(shù)控技術(shù)應(yīng)用工程師:SINUMERIK 840D-810D數(shù)控系統(tǒng)功能應(yīng)用與維修調(diào)整教程
- 中國云存儲發(fā)展報告