Какой индекс ускорит мой XQuery в X-Hive / Documentum xDB? - PullRequest
4 голосов
/ 07 июля 2010

В моей тестовой базе данных около 2500 документов, а поиск по xpath /path/to/@attribute занимает около 2,4 секунды. Выполнение distinct-values(/path/to/@attribute) занимает 3,0 секунды.

Мне удалось ускорить запросы на /path/to[@attribute='value'] до сотен или десятков миллисекунд, добавив индекс значения Path на /path/to[@attribute<STRING>], но ни один индекс, о котором я могу подумать, не будет выбран для более общего запроса.

Кто-нибудь знает, какие индексы мне следует использовать?

1 Ответ

1 голос
/ 05 ноября 2013

Указанный вами индекс является правильным (/ path / to [@attribute]), но, к сожалению, оптимизатор xDB в настоящее время не распознает этот конкретный случай, поскольку «целевой узел», хранящийся в индексе, всегда является элементом и не атрибут. Если у атрибута / path / to / @ мало результатов, вы можете оптимизировать его, слегка изменив свой запрос следующим образом: Different-values ​​(/ path / to [@attribute] / @ attribute). С помощью этого запроса оптимизатор распознает, что существует индекс, который он может использовать для доступа к элементу «to», но затем он все еще имеет доступ к целевому документу, чтобы получить атрибут для шага @attribute. Именно поэтому он будет полезен только в тех случаях, когда хитов немного: каждый хит, скорее всего, получит доступ к отдельной странице данных.

Что вы также можете сделать, это получить доступ к ключам в индексе напрямую через API: XhiveIndexIf.getKeys (). Это будет очень быстро, но очевидно, что это не очень удобно для пользователя (и должно выполняться оптимизатором).

Очевидно, оптимизатор мог бы справиться с этим. Я добавлю это в трекер ошибок.

...