Próbuję uruchomić kwerendę nad genami 582479 przy użyciu operatora OR, po utworzeniu indeksu na właściwościach: symbol, identyfikator główny, identyfikator drugorzędny i nazwa. Ta kwerenda:Zła wydajność z operatorem 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;
Spektakl jest bardzo słaba, indeksy tworzone są nie używane, ale tylko etykieta SKANUJ> 2912399 Wszystkich db trafienia w 3253 ms
Zmieniono zapytanie używać 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;
indeksy zostały użyte -> 8 łącznej db trafień w 73 ms. Dużo lepiej. Lepszy sposób realizacji zapytania bez użycia UNION?
Dzięki Michael. To naprawdę wstyd, w przeciwnym razie operator AND działa poprawnie –