В 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, который возвращает все записи, содержащиеся в двух индексных диапазонах. Вам нужно:

  1. Для первого значения ключа:

    • Открыть стол (JetOpenTable)
    • выберите индекс (JetSetCurrentIndex)
    • стремиться к началу первого индексного диапазона (JetMakeKey, JetSeek)
    • создать диапазон индекса по первому значению (JetMakeKey, JetSetIndexRange)
  2. Для второго значения ключа:

    • открыть стол во второй раз (JetOpenTable)
    • выберите другой индекс (JetSetCurrentIndex)
    • искать в индексе начало второго значения ключа (JetMakeKey, JetSeek)
    • создать диапазон индекса по второму значению (JetMakeKey, JetSetIndexRange).
  3. Вызов JetIntersectIndexes с двумя диапазонами индексов для создания временной таблицы соответствующих закладок.

  4. Перечислите временную таблицу, возвращаемую вызовом (JetMove). Получить запись закладки (JetRetrieveColumn) и перейти к записям (JetGotoBookmark).
  5. Закройте временную таблицу, когда закончите! (JetCloseTable).
Другие вопросы по тегам