У нас есть запрос ниже временной шкалы, и он содержит много столбцов.Но поскольку количество пользователей увеличивается изо дня в день в производственной среде, время ответа на запрос также увеличивается. Однако для получения ответа потребовалось более 5 секунд.
Нам необходимо оптимизировать его, так как этонаш запрос на главной странице и много выборок данных из базы данных.
Вы можете просмотреть ниже запрос neo4j.Также не могли бы вы помочь мне в оптимизации запроса?
MATCH (n:User {user_id:'09dbf26c-62de-4648-95b5-7f6e46a89522',is_active:'1'}),(p:Post{is_deleted:'0'})
WHERE (n)-[:CREATED{own_status:'1'}]->(p) OR (n)-[:FOLLOWS{follow_status:'1'}]->(:User)-[:CREATED{own_status:'1'}]->(p)
OR (n)-[:FOLLOWS{follow_status:'1'}]->(:Keyword{is_deleted:'0'})-[:KEYWORD]->(p)
OPTIONAL MATCH (po:User{user_id:p.owner_id}) WHERE po.is_active='1' WITH n,p,po
OPTIONAL MATCH (n)-[m:MYBID]->(p) WITH p,n,m as mybid_status, po
OPTIONAL MATCH (n)-[fr:FOLLOWS]->(po) WITH fr,n,p,po,mybid_status
OPTIONAL MATCH (n)<-[por:FOLLOWS]-(po) WITH fr,n,p,po,mybid_status,por
WHERE fr.follow_status='1' AND fr.is_mute=false AND fr.is_blocked=false OR fr IS NULL WITH p,n,mybid_status,po,fr,por
WHERE por.is_blocked=false OR por IS NULL WITH p,n,mybid_status,po,fr,por
WHERE (fr is not null and toInteger(po.is_private) <= 1 AND po.user_id <> n.user_id)
OR (toInteger(po.is_private) <= 1 AND po.user_id = n.user_id)
OR (toInteger(po.is_private) = 0 AND po.user_id <> n.user_id) WITH p,n,mybid_status,po,fr,por
RETURN p,po,p.post_hash_tags,SIZE(()-[:LIKED]->(p) ) as likecount,
SIZE( (n)-[:LIKED]->(p) ) as likestatus,
SIZE( (n)-[:BOOKMARK]->(p) ) as bookmarkstatus, SIZE( (n)-[:REPORT]->(p) ) as reportstatus,
SIZE( (n)-[:FOLLOWS]->(:User {user_id:p.owner_id}) ) as is_follow,mybid_status, count(*) as postcount
ORDER BY p.created_at DESC
SKIP 0 LIMIT 10