产品索引:
订单索引:
产品有50K节点
订单有500K节点
当我在现有节点上创建上述场景的关系时。 社区版3.1需要15分钟。
查询:
MATCH(prod:Products)
WHERE prod.ID = 999
WITH prod
MATCH (ord:Orders)
WHERE ord.ID = prod.ID and ord.SaleID=prod.SaleID and ord.CountryID = prod.CountryID and ord.ProductID = prod.ProductID
CREATE (prod)-[prod_ord]->(ord)
目前的conig:
RAM - 64g heap max = min = 32 页面交换=默认/自动
数据库命中 - > 5亿次点击
Q1。它不考虑索引,如何强制它通过以下索引考虑索引?
使用Index ON prod:Product(SaleID)
使用Index ON prod:Product(ProductID)
使用Index ON prod:Product(CountryID)
使用Index ON prod:产品(ID)
Q2。为什么需要这么多时间?任何配置都需要完成? 还是数据模型错了?
答案 0 :(得分:1)
您的查询使用Products
标签,但您的索引位于Product
。
同时提取产品ID作为参数并在第二次匹配中使用它。然后应该使用Orders(ID)
索引:
MATCH (prod:Products)
WHERE prod.ID = {prodId}
WITH prod
MATCH (ord:Orders)
WHERE ord.ID = {prodId} and ord.SaleID=prod.SaleID and ord.CountryID = prod.CountryID and ord.ProductID = prod.ProductID
CREATE (prod)-[prod_ord]->(ord)
您可以通过
在浏览器中设置参数:param prodId : 999
其他索引可能不是很有用,因为通常在一个属性上进行查找然后过滤结果比使用多个查找和进行某种连接更快。如果某些属性更独特,请改为使用。