Delphi ADOQuery FILTER + MySQL

andrey.vadimovich
Дата: 20.01.2013 20:59:42
Привет.

Есть необходимость переместить загрузку данных через медленный канал.
Суть в чем: записи выбираются из таблицы MySQL (~80 тищ. +-15Мб трафика)
Но сейчас выбираются по 10 -20 строк через каждые 5 -10 сек. (это все связано с работой программы, так что это не важно), что вместе с медленным интернетом в 2Мбит создает затормаживание работы на 1,2 - 2,1 сек, что очень раздражает.

Хочется загрузить в оперативную память всю таблицу из сервера в начале работы, а в процессе работы только фильтровать с помощью фильтра ADOQuery.Filter все записи. Записи не обновляются часто, так что технически такое решение должно дать выгоду в скорости.

Но вот встал вопрос с запросами в фильтр. Они НЕ одинаковые с запросами к базе данных (я сейчас про раздел WHERE говорю)
т.е. к базе делал запрос такого вида " preparat LIKE ('%анальг%н%') "
а фильтр такого не допускает чтобы знак % стоял в средине.
Ну и можно в принципе обойтись запросом вида " preparat LIKE ('%анальг%) AND preparat LIKE ('%н%') ", да вот только оно не дает того же набора данных, а вот это уже проблема.

Подскажите как быть, или еще есть какие то варианты.
Нужно сократить время выборки во время работы к 0, а вот перед началом работы есть времени хоть 10 мин.
miksoft
Дата: 20.01.2013 23:32:43
Имхо, все возможные варианты для решения задачи находятся на стороне Delphi.

Мне сходу видится два варианта:
1) Таки разобраться с синтаксисом ADOQuery.Filter.
2) Данные сложить в какую-то локальную базу (дисковую или ин-мемори), которая умеет выполнять требуемые запросы.
miksoft
Дата: 20.01.2013 23:34:32
Поскольку в подфоруме Delphi такой топик уже есть, то этот переносить не буду, но закрою.