Cypher: использовать предложение WHERE или определение свойства MATCH для точного соответствия?
В Neo4j (версия 3.0) следующие запросы возвращают одинаковые результаты:
1. MATCH (a:Label) WHERE a.property = "Something" RETURN a
2. MATCH (a:Label {property: "Something"}) RETURN a
Играя с некоторыми большими наборами данных, я заметил (и проверил, используяEXPLAIN
а такжеPROFILE
) что в некоторых случаях запросы, подобные второму, выполняются лучше и быстрее. Хотя существуют другие случаи, когда обе версии работали одинаково, я еще не видел ни одного, где первая версия работала лучше.
Документация и учебники neo4j также разделены. Там нет явного сравнения между двумя. Документы и документы используют обе версии, часто склоняясь к первой (возможно, потому что неточные совпадения могуттолько быть сделано с использованиемWHERE
пункт). Но в рекомендациях также говорится, что чем раньше вы сузите поиск, тем быстрее будет поиск.