У меня есть таблица в Access с 1 полем с именем HostName, это текстовое поле со 100 символами макс. Я использую его для хранения имен хостов DNS. Поле настраивается как первичный ключ. Если я следующий запрос возвращает ожидаемые результаты, но занимает около 8 секунд, чтобы завершить на столе с 1 миллиона записей:Запрос доступа, не использующий индекс
ВЫБРАТЬ TOP 1 HostsRev.HostName FROM HostsRev WHERE (((HostsRev.HostName)> = "test")) ORDER BY HostsRev.HostName;
Если я удаляю часть «ORDER BY», она возвращается менее чем за 1 секунду, но не всегда возвращает то, что я ожидаю, а не первую запись, которая равна = = «test».
Я делаю запрос через ADO из приложения C++, но я также тестировал в Access, создавая запрос и получая те же результаты.
Мне нужно быстро найти первую запись, если она есть, которая начинается с заданной строки. Я также попытался использовать LIKE-запрос, но имел те же результаты. Мне нужно сделать это, потому что, если я ищу на сайте images.google.com, мне нужно знать, содержит ли список google.com, но не images.google.com (я фактически храню имена хостов в порядке обратной строки, чтобы сделать эту работу правильно , и переверните строки перед выполнением поиска).
В этом была проблема, я просто решил немного по-другому. Поскольку мои имена хостов используют известный формат, я добавил что-то вроде WHERE HostName> = "test" И HostName <= ".test", который получил начальную фильтрацию вплоть до нескольких записей, а затем верхняя часть 1 выбора могла быть быстрой. – eselk