图数据库Neo4j

neo4j 各种索引,提速

2018-08-24  本文已影响1536人  布口袋_天晴了

Neo4j CQL-索引

索引是一种数据结构,可以提高数据库数据检索的速度。

在 Neo4j 中,你可以给有标签的点的任何属性创建索引。一旦你创建了一个索引,Neo4j 将会管理它,在数据更新时保持最新的索引。

和关系数据库一样,Neo4j同样可以创建索引来加快查找速度。

在关系数据库中创建索引需要索引字段和指向记录的指针,通过索引可以快速查找到表中的行。

在Neo4j中,其索引是通过属性来创建,便于快速查找节点或者关系。  **【所以为了提速,首先得保证节点有很多属性】**

Neo4j SQL支持节点或关系属性上的索引,以提高应用程序的性能。

·CREATE INDEX 创建索引

·DROP INDEX 删除索引

1.给节点的属性名创建索引/删除索引  节点{...属性...}

先复习一下创建节点的语法:

CREATE (<node-name>:<label-name1>:<label-name2> ... ... :<label-namen>)

CREATE (<node-name>:<label-name1>:<label-name2> ... ... :<label-namen>

    {<Property1-name>:<Property1-Value>

    ... ... ... ....

    <Propertyn-name>:<Propertyn-Value>}

)

给某类标签节点的某个属性名创建索引:

CREATE INDEX ON : <label_name> (<property>)

删除某类标签节点的每个属性名的索引:

DROP INDEX ON : <label_name> (<property>)

给Concept类节点的name属性创建索引 删除索引

2.关于关系的属性名创建索引/删除索引  关系{...属性...}

先复习一下创建关系的语法:

2.1)单个标签到关系

CREATE (<node1-name>:<label1-name>) - [(<relationship-name>:<relationship-label-name>)] -> (<node2-name>:<label2-name>)

eg: CREATE (p1:Person) - [r1:LIKES] -> (p2:Book)

eg:CREATE(p1:Person {name:"布口袋_天晴了",school:'CQUPT'}) - [r:LIKES] -> (p2:Book {name:"认知突围",author:"蔡垒磊"})

2.2)多个标签到关系

CREATE (<node1-name>:<node1-label-name1>:<node1-label-name2>: ... ...) - [(<relationship-name>:<relationship-label-name>)] -> (<node2-name>:<node2-label-name1>:<node2-label-name2>: ... ...)

eg:CREATE (p1:Person:Student) - [r1:LIKES] -> (p2:Book)

eg:CREATE(p1:Person:Student {name:"布口袋_天晴了",school:'CQUPT'}) - [r:LIKES {tag:'喜欢'}] -> (p2:Book {name:"认知突围",author:"蔡垒磊"})

Neo4j索引对象可分为:基于relationship的索引和基于node的索引。neo4j本身即是关于relationship的索引实现,所以不用对关系的属性名创建索引。 所以一般说创建索引,都是说的针对节点的属性创建索引。

所以通过查找关系,来获取节点会比直接在整个图中查找节点的速度快。


3.查看已经对Neo4j数据库创建了多少索引

在Neo4j浏览器中,可以使用:schema命令查看所有索引和约束。

:schema

4.索引是不是必要的???

当 Neo4j 创建索引时,它会在数据库中创建冗余的副本,因此使用索引会占用更多的硬盘空间并减慢写入速度。

因此在决定索引哪些数据时你需要进行一些权衡。

一般来说当你知道某些节点数量很多时,创建索引是个不错的主意。或者你发现查询时间太长可以尝试通过添加索引来解决。

上一篇 下一篇

猜你喜欢

热点阅读