7.6 Совместимость
Cypher продолжает изменяться довольно быстро. Часть этих изменений – внутренняя; мы добавляем новые сопоставления образцам, накопители и другую оптимизацию, которые, мы надеемся, позволят вашим запросам выполняться быстрее.
Другие изменения непосредственно видны нашим пользователям – синтаксис также претерпевает изменения. Добавляются новые концепции, а старые изменяются, чтобы отвечать новым возможностям. Чтобы защитить вас от необходимости постоянного следования за изменениями синтаксиса, Cypher позволяет вам использовать старый парсер и, в то же время, получить ускорение благодаря новой оптимизации.
Есть два способа, определяющих выбор парсера. Вы можете конфигурировать вашу базу данных с помощью конфигурационного параметра cypher_parser_version и ввести тот парсер, который вы хотите использовать (в настоящее время поддерживаются 1.9, 2.0). Любой запрос Cypher, который явно не утверждает обратного, получит тот парсер, который вы сконфигурировали.
Другой способ состоит в указании парсера, используемого для конкретного запроса. Просто укажите "CYPHER 1.9" в начале, и данный запрос будет проанализирован с помощью версии парсера 1.9. Например:
CYPHER 1.9 START n=node(0) WHERE n.foo = "bar" RETURN n
7.7 Производительность запросов
Cypher старается выполнять запросы максимально быстро.
Однако для достижения максимальной производительности выполнения запроса может оказаться полезным перефразировать запрос, используя знания о предметной области и приложении.
Общая цель ручной оптимизации запроса состоит в том, чтобы избежать извлечения лишних данных из графа. По крайней мере, старайтесь выполнить фильтрацию данных на самых ранних этапах, чтобы уменьшить объем обрабатываемых данных на более поздних стадиях выполнения запроса. Это также справедливо для возвращаемых данных: избегайте возвращения целых узлов и связей; лучше выбирайте данные, которые вам нужны, и возвращайте только их. Также следует установить верхний предел на образцы длины переменных, чтобы они не охватывали большие наборы данных, чем это необходимо.
Каждый запрос Cypher оптимизируется и преобразуется в план выполнения исполняющим движком Cypher. Чтобы минимизировать используемые для этого ресурсы, используйте параметры вместо литералов везде, где это возможно. Это позволит Cypher повторно использовать ваши запросы, избегая лишнего аналитического разбора и построения нового плана выполнения.
Замечание
Когда Cypher строит план выполнения, он обращается к схеме в поиске полезных индексов. Такие решения в пользу того или иного индекса являются действительными до тех пор, пока не изменится схема, поэтому добавление или удаление индексов приводит к тому, что план выполнения убирается из кэша.