Я сомневаюсь, что бинарный поиск будет быстрее, чем то, что механизм данных SQL может сделать для вас.Однако вам потребуется индекс для этого столбца.
Даже при 100 миллионах строк поиск одной строки должен выполняться довольно быстро.Чего НЕ случится, так это если вам придется перезапускать или перетягивать «много» строк снова и снова.Поэтому неясно, как вы извлекаете эти данные.
Однако, если у вас есть какой-то тип циклического кода, который должен каждый раз извлекать по одной строке, тогда вы можете обойти механизм SQL и использовать поиск () для этого индекса - это должно привести к гораздо более быстрым результатам, чем использование операторов SQL для извлечения одной строки.
Обратите внимание, что seek () не работает для связанной таблицы, но вы можете обойти это ограничение, создавэкземпляр объекта базы данных и, следовательно, поиск может использоваться даже со связанными таблицами.
Вышеприведенное предполагает использование таблицы jet / ace, а не сервера sql.
Таким образом, обходя операторы sqlи использование команды seek () (с индексом) даст лучшую производительность здесь - скорее всего, = по сравнению с любым подходом к пользовательской функции, который вы строите.
==== Редактировать ====
Редактировать:
Автор также запросил поиск () БОЛЕЕ чем одно значение ключа.
Итак, давайте предположим, что нам требуется искать () для HotelName и city.
И мы хотим обойти sql для ПРЯМОГО использования индексации.
Итак, нам нужны HotelName и City, и мы хотим искать () по этим двум ключевым значениям.
Вы должны создать мульти-ключевой индекс, чтобы это работало.(не путать с индексом составного ключа, основанным на более чем одном столбце, который ТАКЖЕ возможен !!!).
Таким образом, способ, которым вы делаете это в дизайне таблицы - нажмите на значок индексов.
В диалоговом окне индекса вы можете ввести столбец MORE THAN ONE для индекса SINGLE (это очень важно для работы).
Таким образом, диалоговое окно будет выглядеть так:
Итак, у нас есть 5 индексов.Однако обратите внимание на индекс под названием HotelSearch.Обратите внимание, как мы можем ввести БОЛЬШЕ, чем один столбец для индекса.
Вы делаете это, оставляя имя индексного поля ниже «пусто»
Кроме того, выше приведен пример.Я бы настоятельно рекомендовал вам сбросить любой индекс, который не требуется (это связано с таким большим числом строк - эти индексы занимают значительное количество места - и вы, вероятно, уже приближаетесь к максимальному размеру файла данных в 2 гигабайта здесь).
Обратите внимание на два столбца для ОДНОГО индекса!Конечно, мы могли бы добавить больше столбцов (ключевых значений) к этому индексу.Убедитесь, что вы учитываете «порядок» столбцов, так как у вас ТОЛЬКО могут быть дополнительные столбцы в качестве необязательных для поиска, не допускается пропуск значений преобладающих ключей (так что вы можете предоставить только первый столбец индекса или несколько послепо вашему желанию - но пропуск не разрешен).
Поэтому просто оставьте поле столбца имени индекса пустым - это означает, что индексный ключ будет применяться к ОДНОМУ индексу для seek ().
Это означает, что два индекса СЕЙЧАС принадлежат ОДНОМУ имени индекса.
Таким образом, вам нужно несколько спланировать здесь, что такое «группа» критического индекса, которую вы собираетесь видеть (и соблюдать порядок).и в уме).
Хорошо, теперь, когда мы создали это индексное имя с несколькими ключами, теперь мы можем искать по двум значениям ключа.Наш код будет выглядеть следующим образом:
Sub SeekTest()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("dbo_tblHotels2")
With rst
.Index = "HotelSearch"
.Seek "=", "Holiday Inn", "Vancouver"
If .NoMatch = False Then
Debug.Print "found"
' got one!!!
End If
End With
End Sub
Имейте в виду, что этот подход является грубым использованием высокоскоростной индексации - и он будет работать на скорости «ассемблера» вашего процессора.
Это будет где-то в 100-1000 раз быстрее, чем при использовании SQL-запросов.Быстро блистает.