У меня есть запрос JCR, как:JCR-запрос - медленная производительность при использовании OR?
SELECT * FROM [my:nodetype] WHERE ISDESCENDANTNODE([/somepath]) OR (otherPath LIKE '/someotherpath')
Он выполняет за 6 секунд.
Свойство otherPath
является многозначным строковым свойством (только два объекта его установлены). Есть ТОЛЬКО 7 общие узлы типа my:nodetype
во всей базе данных
Хотя как отдельные запросы:
SELECT * FROM [my:nodetype] WHERE ISDESCENDANTNODE([/somepath])
И
SELECT * FROM [my:nodetype] WHERE otherPath LIKE '/someotherpath'
Execute в разы меньше, чем 1мс. Есть ли причина, по которой первый запрос работает так медленно? Возможно, есть возможность увидеть план запроса в Jackrabbit так же, как и с базами данных SQL? Как я могу отладить проблему?
Я не могу себе представить, почему поиск через 7 узлов в целом, независимо от того, критерии поиска будет производить 7 второй раз запустить запрос ...
Я предполагаю, что вы используете дуб Jackrabbit, верно? Это ограничение оптимизатора SQL-2. Если вы используете XPath, он должен работать нормально. Ах, извините, вы не можете написать этот запрос в XPath ... поэтому у меня нет вариантов, извините. Вы можете использовать «union» (который не является частью спецификации JCR, но работает с Oak). –
Фактически я использую простой jackrabbit, который включен в магнолии cms. Я не думаю, что есть поддержка для «союза». – Pma
ОК, то это, вероятно, Jackrabbit 2.x. Тогда я предполагаю, что два запроса - это единственное решение, которое у вас есть. –