Слишком длительный поиск

Upgrader
Дата: 17.12.2011 23:52:49
Проблема вроде как и не проблема, но на старом слабом компьютере слишком долго выполняется, это не устраивает.
Описываю ситуацию:
Идет поиск и выбор из таблиц таким образом:
Forms!Форма![Список].RowSource = "SELECT DISTINCTROW Пред.бла1, Пред.бла2, Пред.бла3, Пред.бла4, Пред.бла5, Пред.бла6, Пред.бла7
FROM Пред IN 'C:\ФайлБаза.mdb'
WHERE (((Пред.Ном) Like '*' & [Forms]![Форма]![ПолеНом] & '*') And ((Пред.Нам) Like '*' & [Forms]![Форма]![ПолеНам] & '*') And ((Пред.Ад) Like '*' & [Forms]![Форма]![ПолеАд] & '*') And ((Пред.И) Like '*' & [Forms]![Форма]![ПолеИ] & '*')) ORDER BY Пред.Ном;"

Такая, реальная картина (ничего не вырезал, только переименовал названия на несуществующие по понятным причинам, но я думаю смысл работы понятен.

Решающее значение имеет:
FROM Пред IN 'C:\ФайлБаза.mdb'

При поиске внутри существующей базы, все очень шустро работает.
А вот если обращаться к внешней - то начинаются неясные тормоза.
Время выполнения запроса увеличивается в десятки раз... хотя всё тоже самое, файл этот на локальном жестком диске, скорость доступа к нему высокая.
Как можно ускорить?
ПЕНСИОНЕРКА
Дата: 18.12.2011 00:09:59
Upgrader,

хотя бы для читабельности


Forms!Форма![Список].RowSource = 
"SELECT DISTINCTROW Пред.бла1, Пред.бла2, Пред.бла3,
 Пред.бла4, Пред.бла5, Пред.бла6, Пред.бла7

FROM Пред IN 'C:\ФайлБаза.mdb'

WHERE (((Пред.Ном) Like '*' & [Forms]![Форма]![ПолеНом] & '*')
 And ((Пред.Нам) Like '*' & [Forms]![Форма]![ПолеНам] & '*')
 And ((Пред.Ад) Like '*' & [Forms]![Форма]![ПолеАд] & '*')
 And ((Пред.И) Like '*' & [Forms]![Форма]![ПолеИ] & '*'))
 ORDER BY Пред.Ном;"
alvk
Дата: 18.12.2011 05:19:15
Upgrader,

Ускорит?? Поставить SQL сервер и перенести таблицы на него.
RomanFromOr
Дата: 18.12.2011 08:39:38
Upgrader, а если привязать в текущую базу таблицы из C:\ФайлБаза.mdb и тогда поиск делать только в текущей базе?
Upgrader
Дата: 18.12.2011 12:27:22
RomanFromOr
а если привязать в текущую базу таблицы
А как привязать внешнюю таблицу?

alvk
Ускорит?? Поставить SQL сервер и перенести таблицы на него.
Так как без подключения внешней БД это работает очень даже быстро, я склонен думать что все-же можно что-то сделать.
qwerty112
Дата: 18.12.2011 12:34:31
Upgrader
А как привязать внешнюю таблицу?

файл - внешние данные - связь с таблицами


а зачем в запросе - DISTINCTROW ?
...ну и Like по полю ПолеНом, какбэ намекает...
Rivkin Dmitry
Дата: 18.12.2011 12:43:10
Хотелось бы узнать, насколько оправдано применение в 4 поляъ фильтрации Like?
И еще есть вопросы по количеству записей в таблице и индексах
Upgrader
Дата: 18.12.2011 13:16:58
Rivkin Dmitry
насколько оправдано применение в 4 поляъ фильтрации Like?
Оправдано.
Rivkin Dmitry
И еще есть вопросы по количеству записей в таблице и индексах
В таблице 2000 записей.

Еще раз хочу обратить внимание на то, что в текущей БД данный запрос обрабатывается быстро. Долго - если подключать внешнюю.
По этому есть даже мысль копировать таблицу себе и в ней уже искать, но хотелось бы прям сразу, чтобы всегда свежие данные.
Rivkin Dmitry
Дата: 18.12.2011 13:33:10
Upgrader,
2000 записей - это, конечно, ничего. Тут уже предлагали прилинковать таблу. Это тоже ничего не дает?

И все же, чем оправдано применение Like по 4 полям сразу?
Upgrader
Дата: 22.12.2011 15:36:27
Решил проблему следующим образом: копирую все данные из внешнего .mdb в свой, и у себя уже ищу. Скорость поиска таким образом (с учетом копирования всех данных каждый раз при поиске!) сократилась в десятки раз и полностью устраивает.

Вот, интересно почему так...
По идее должно быть наоборот. О_о
Rivkin Dmitry
Upgrader,
И все же, чем оправдано применение Like по 4 полям сразу?
Так как данных не много, это в общем погоды не сделает.