0
我有以下的Cypher查詢:眼下Neo4j的SDN4實體繼承和索引
PROFILE MATCH (childD:Decision)
WITH childD
ORDER BY childD.createDate
DESC SKIP 0 LIMIT 10
MATCH (childD:Decision)-[ru:CREATED_BY]->(u:User)
OPTIONAL MATCH (childD:Decision)-[rup:UPDATED_BY]->(up:User)
RETURN ru, u, rup, up, childD AS decision, [ (childD)-[rdt:BELONGS_TO]->(t:Tag) | t ] AS tags
在我的Neo4j數據庫(〜23K決策節點)這個查詢的工作〜50毫秒,我不明白,或者使用索引childD.createDate
字段。
這是PROFILE
輸出:
這是我的SDN 4個實體:
@NodeEntity
public abstract class BaseEntity implements BaseEntityVisitable {
private static final String CREATED_BY = "CREATED_BY";
private static final String UPDATED_BY = "UPDATED_BY";
@GraphId
private Long graphId;
@Index(unique = false)
private Date createDate;
@Relationship(type = CREATED_BY, direction = Relationship.OUTGOING)
private User createUser;
@Index(unique = false)
private Date updateDate;
@Relationship(type = UPDATED_BY, direction = Relationship.OUTGOING)
private User updateUser;
....
}
@NodeEntity
public class Decision extends BaseEntity {
private static final String BELONGS_TO = "BELONGS_TO";
private static final String CONTAINS = "CONTAINS";
private static final String DEFINED_BY = "DEFINED_BY";
@Index(unique = true)
private Long id;
@Index(unique = false)
private String name;
....
}
這是:schema
輸出:
Indexes
ON :BaseEntity(createDate) ONLINE
ON :BaseEntity(updateDate) ONLINE
ON :Decision(lowerName) ONLINE
ON :Decision(name) ONLINE
ON :Decision(totalChildDecisions) ONLINE
ON :Decision(totalViews) ONLINE
ON :Decision(id) ONLINE (for uniqueness constraint)
請注意,createDate
指標被設定在:BaseEntity
而不是:Decision
熱,以檢查該指數的作品(或沒有),在查詢這部分:ORDER BY childD.createDate
感謝您的回答。還有一個關於SDN 4繼承和Neo4j索引的問題 - 例如下面的查詢:MATCH(childD:Decision {name:'Andres'})RETURN childD'它會使用索引來聲明在SDN 4'BaseEntity'處聲明的'name'在'Decision'(其中'Decision extends BaseEntity')直接? – alexanoid
如果您的模式具有該特定標籤的特定索引(就像您發佈的內容一樣),MATCH將使用該索引。我對SDN4並不知情(所以我不確定你是如何創建模式的)......但模式中的內容會覆蓋代碼中的任何內容。 –
100%清除 - 如果我的決定節點有兩個標籤 - 「:BaseEntity」和「:Decision」,所以在這種情況下,如果我有索引':BaseEntity(createDate)',我使用'MATCH(d:Decision )WHERE d.createDate = {createDate}'所以這個索引將被使用? – alexanoid