2015-01-21 3 views
0

У меня есть запрос 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 второй раз запустить запрос ...

+0

Я предполагаю, что вы используете дуб Jackrabbit, верно? Это ограничение оптимизатора SQL-2. Если вы используете XPath, он должен работать нормально. Ах, извините, вы не можете написать этот запрос в XPath ... поэтому у меня нет вариантов, извините. Вы можете использовать «union» (который не является частью спецификации JCR, но работает с Oak). –

+0

Фактически я использую простой jackrabbit, который включен в магнолии cms. Я не думаю, что есть поддержка для «союза». – Pma

+0

ОК, то это, вероятно, Jackrabbit 2.x. Тогда я предполагаю, что два запроса - это единственное решение, которое у вас есть. –

ответ

0

Это известная ошибка в Jackrabbit. Я не уверен, но я думаю, что это все еще не исправлено в последней версии Jackrabbit.

Нет ничего общего с этим, вы должны использовать два запроса.

Смежные вопросы