| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Фильтрация в БД |
| Автор: WaReZMEN 22.2.2008, 01:42 |
| Вот раскажите как в lingvo так быстро слова фильтруются??? там же дофига слов... я вот базу сделал из 300000 слов так задержка заметная (около 2-3 сек). (База на Файрберде). Делал фильтрами на датасети долго делел процедурои в запросе но это тож долго так как после присваеванич параметра приходится переоткрывать датасет. Порекамендуите что нибудь. |
| Автор: Poseidon 22.2.2008, 09:38 |
| Хотелось бы увидеть код твоих "фильтров". Мне приходилось работать с БД в пол миллиона записей, и обычный SELECT делал выборку за секунду (правда база была Oracle, но, думаю, это не существенно). Показывай чо ты там делаешь, может дело не в базе, а в алгоритме |
| Автор: X-Vlad 22.2.2008, 11:19 | ||||
многое зависит от архитектуры базы.. ну и смотря что ты вибирал )))) например
будет делать за секунду а насчет лингво я недумаю что он это все читает с файла или базы.. он загружает в память а потом уже там ищет. (ИМХО) |
| Автор: WaReZMEN 24.2.2008, 02:45 | ||||||||||
Пробовал делать так
Сами понимаете на Change Edit1 выполняется этот кусок кода. Ща покажу select он кстате процедура в Фаирберде...
Код процедуры
Код процедуры GET_RUSSIAN_WORD(:IN_WORD) (процедура get_english_word(:IN_WORD) точно такаяже как и GET_RUSSIAN_WORD(:IN_WORD))
Все это работает довольнотоки долго... хочется быстрее ... пробовал делать так При старте проги гружу все слова сразу потом делаю FetchAll и просто фильтрую с помощью датасета вот так:
|
| Автор: WaReZMEN 26.2.2008, 01:04 |
| Ну что поможет ктонибудь? |
| Автор: Esperito 27.2.2008, 23:03 |
| Вообще-то при вводе букв нужного слова существует некоторая задержка перед переходом. То есть, если юзер клацает по клавиатуре быстрее этой задержки, то переход не производится. А у тебя получается, что переход осуществляется после ввода каждой буквы, так ведь? |
| Автор: WaReZMEN 28.2.2008, 01:06 |
| Esperito, обсалютно верно! Но ведь в томже лингво он осуществляется маментально даже не самирая на сикунду. |
| Автор: Deniz 28.2.2008, 07:31 | ||||||
| легко, только начнем с указания правильных данных. Как это понимать?
Лучше фильтровать не в программе по OnFilterRecord, а SQL запросом. Вся проблема в том, что не используются индексы. Предложения по изменению: 1. В таблице spr_russian_word(и всех похожих) добавить поле WordUPPER и хранить там upper(Word). 2. В таблице spr_russian_word(и всех похожих) добавить индекс по WordUPPER. 3. Заменить Like на Starting with
Делай, далее посмотрим на сколько увеличилось быстродействие. |
| Автор: Deniz 29.2.2008, 11:33 | ||||
это я знаю. Вопрос касался разницы в кол-ве параметров запроса и процедуры.
|
| Автор: WaReZMEN 5.3.2008, 08:28 | ||
Это я понимаю... вообщем воспользовался твоими предложениями прирост заметен и вполне удволетворяет мои потребностям |