在现有节点上创建关系时出现Neo4j性能问题?
产品索引:在现有节点上创建关系时出现Neo4j性能问题?,neo4j,Neo4j,产品索引: 关于:产品(SaleID) 关于:产品(CountryID) 关于:产品(ProductID) 关于:产品(ID) 没有更多的属性 订单索引: 关于:订单(SaleID) ON:订单(CountryID) ON:订单(ProductID) ON:订单(ID) 没有更多的属性 产品有50K个节点 Orders有500K个节点 当我在现有节点上创建上述场景的关系时。 社区版本3.1需要15分钟 查询: MATCH(prod:Products) WHERE prod.ID = 999
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)
当前圆锥曲线:
RAM-64g
堆最大值=最小值=32
页面交换=默认/自动
DB命中->5亿次命中
问题1。它没有考虑索引,我如何强制它考虑通过以下索引进行索引
在prod:Product(SaleID)上使用索引
在prod:Product(ProductID)上使用索引
在产品上使用索引:产品(CountryID)
在prod:Product(ID)上使用索引
问题2。为什么要花这么多时间?需要进行任何配置吗?
或者数据模型是错误的 您的查询使用
产品
标签,但您的索引位于产品
上
还提取产品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
其他索引可能不是很有用,因为通常对一个属性进行查找,然后过滤结果比使用多个查找和进行某种连接要快。如果某些属性更独特,请使用它。1。该索引仅针对产品…此处存在打字错误。我现在已经改正了。2.关系是通过桌面客户端应用程序创建的。因此,prodID是动态分配的。每次从客户端触发时都会创建关系。你能帮我解决性能问题吗?我们能强制查询“使用索引”吗?@neoman1你可以尝试交换匹配子句,这可以减少需要过滤的行数。