Sto cercando di eseguire una query su 582479 geni utilizzando l'operatore OR, dopo aver creato l'indice sulle proprietà: simbolo, identificatore primario, identificatore secondario e nome. Questa la query:Cattiva prestazione con l'operatore OR
PROFILE
MATCH(g:Gene) WHERE g.symbol="CG11566" OR
g.primaryidentifier="CG11566" OR
g.secondaryidentifier="CG11566" OR
g.name="CG11566"
RETURN g.id, g.primaryidentifier, g.secondaryidentifier, g.symbol, g.name
ORDER BY g.id;
Il rendimento è molto povera, gli indici creati non sono utilizzati, ma solo l'etichetta scan-> 2912399 totali colpi db a 3253 ms
cambiato la query per utilizzare UNION:
PROFILE
MATCH(g:Gene) WHERE g.symbol='CG11566' return g.id
UNION MATCH(g:Gene) WHERE g.primaryidentifier='CG11566' return g.id
UNION MATCH(g:Gene) WHERE g.secondaryidentifier='CG11566' return g.id
UNION MATCH(g:Gene) WHERE g.name='CG11566' return g.id;
indici sono stati utilizzati -> 8 successi db totali in 73 ms. Molto meglio. Qual è il modo migliore per implementare la query senza usare UNION?
Grazie Michael. È davvero un peccato, altrimenti l'operatore AND funziona correttamente –