Попробуйте профилирование запрос, чтобы увидеть, если он действительно использует индексы:
PROFILE
WITH "qwe" AS forename, "asd" AS surname
MATCH (p:Person {forename: forename, surname: surname})
RETURN p
Если нет, то вы можете заставить его:
WITH "qwe" AS forename, "asd" AS surname
MATCH (p:Person {forename: forename, surname: surname})
USING INDEX p:Person(forename)
USING INDEX p:Person(surname)
RETURN p
Как уже упоминалось в Cypher refcard (курсив мой):
Использование индекса может быть применено, когда Cypher использует субоптимальный индекс или более th следует использовать один индекс.
См. Также главу USING
.
Update
С помощью нескольких индексов на одном узле в настоящее время не поддерживается, давайте сосредоточимся назад о том, почему запрос происходит медленно, и действительно ли он что-то делает. Вы можете профилировать фактическое LOAD CSV
для подмножества, и посмотреть, если данные совпадают, что угодно:
PROFILE
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///personaldata.csv' AS line1
WITH line1
LIMIT 10
OPTIONAL MATCH (p:Person {forename:line1.forename, surname:line1.surname})
RETURN p, line1.newPersonNumber
Таким образом, вы можете проверить, что MATCH
находит что-то (то есть имя и фамилия не требуется зачистка или что-то) , и вы также можете проверить, какой индекс более выгоден для запроса: поскольку будет использоваться только один индекс, результаты будут отфильтрованы по другому свойству, и это будет быстрее, если вы используете самый дискриминантный индекс. Если все люди - Джонс, вам лучше использовать индекс по фамилии, но если они все есть, используйте индекс для имени. Если все они у меня есть, у вас проблема с дублированием ... В любом случае, сравнение чисел на шагах фильтрации между двумя профилями (с одним индексом) должно дать вам представление о распределении индексов.
Извините за поздний ответ. В запросе используется только один индекс, а не оба. После запуска 'USING INDEX р: Человек (имя) с использованием индекса р: Лицо (фамилия)' я получаю 'Несколько намеки на ту же переменную не поддерживаются (строка 3, столбец 13 (смещение: 109)) " ИСПОЛЬЗОВАНИЕ ИНДЕКС p: Person (forename) ". Я думаю, что индексы не проблема, потому что я позволяю запрос работает в течение некоторого времени, а затем проверить, есть ли узлы с этим свойством, как это: 'MATCH (р: Person) WHERE EXISTS (p.newPersonNumber) RETURN p', но я получил 0 строк. – Porjaz
Я обновил ответ, чтобы сосредоточиться на отладке и профилировании запроса. –
Использование 'ПРОФИЛЬ' Я вижу, что' MATCH' находит результаты, поэтому я предполагаю, что запрос написан правильно. Кроме того, для меня более полезно иметь индекс на 'forename' (как это сейчас). Я не знаю, что еще может быть проблемой. Также обратите внимание, что файл CSV составляет 4,7 ГБ. – Porjaz