用from py2neo import Graph 批量查询一个用户的二度关系数量,速度特别慢
发布于 7 年前 作者 feng1990liu 4904 次浏览 来自 问答

def get_two_contact_cnt(phone): two_contact = ‘’‘ match(u:User)-[r]-(f:Friend)-[r1]-(u1:User) where size(f.phone)=11 and substring(f.phone,0,2) in [‘13’,‘14’,‘15’,‘16’,‘17’,‘18’,‘19’] and u.phone={0} return count(distinct u1) as cnt ’’‘ data = graph.data(two_contact.format(’’’+phone+’’’)) cnt = data[0][‘cnt’] return cnt 函数如上,查询流程是把csv读到dataframe中,然后map df的phone列去查询该用户的二度联系人个数,csv大概9w条数据,机器是8核32G,查询速度目前需要2天以上,cpu一直是饱满状态,有什么优化的方向吗?user的phone属性有索引

1 回复

建议: 1、对标签 User 的属性 phone 建唯一性约束,如果电话号码是唯一的: CREATE CONSTRAINT ON (user:User) ASSERT user.phone IS UNIQUE 2、也可以优化下语句: MATCH (u:User {phone:{0})-[r]-(f:Friend)-[r1]-(u1:User) WHERE size(f.phone)=11 AND substring(f.phone,0,2) IN [‘13’,‘14’,‘15’,‘16’,‘17’,‘18’,‘19’] RETURN count(distinct u1) AS cnt 【注】 [r], [r1] 中,最好带上关系类型。其效率会有所提高。 如果优化了,请告知结果。谢谢!

回到顶部