В ESE (JetBlue) есть ли способ ограничить поиск несколькими ключами?
В Extensbile Strage Engine (ESE/JetBlue) у меня есть таблица, содержащая данные, которые я хотел бы найти, используя два индекса
Предполагая, что в каждой строке три целых числа X, Y и Z. Я бы хотел быстро найти все строки, где X=10 и Y=20 (например)
результирующий набор будет содержать все записи, где X=10, Y=20 и Z= где бы Z не оказалось
Это возможно?
последовательность
JetSetCurrentIndex(), JetMakeKey(), JetSeek() и JetMove() смущают меня. я не на 100%, это даже возможно без поиска X=10 и последующей фильтрации всех значений, где Y!=20 сам?
Спасибо!
1 ответ
Это можно сделать с помощью API-интерфейса JetIntersectIndexes, который возвращает все записи, содержащиеся в двух индексных диапазонах. Вам нужно:
Для первого значения ключа:
- Открыть стол (
JetOpenTable
) - выберите индекс (
JetSetCurrentIndex
) - стремиться к началу первого индексного диапазона (
JetMakeKey
,JetSeek
) - создать диапазон индекса по первому значению (
JetMakeKey
,JetSetIndexRange
)
- Открыть стол (
Для второго значения ключа:
- открыть стол во второй раз (
JetOpenTable
) - выберите другой индекс (
JetSetCurrentIndex
) - искать в индексе начало второго значения ключа (
JetMakeKey
,JetSeek
) - создать диапазон индекса по второму значению (
JetMakeKey
,JetSetIndexRange
).
- открыть стол во второй раз (
Вызов
JetIntersectIndexes
с двумя диапазонами индексов для создания временной таблицы соответствующих закладок.- Перечислите временную таблицу, возвращаемую вызовом (
JetMove
). Получить запись закладки (JetRetrieveColumn
) и перейти к записям (JetGotoBookmark
). - Закройте временную таблицу, когда закончите! (
JetCloseTable
).