Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > как ускорить процесс поиска |
Автор: marhatter 18.1.2010, 18:50 | ||
Здравствуйте. Тип базы данных - dBase, способ доступа к базе - BDE. Есть 7 таблиц. В первой хранится общее количество искомых значений (их количество - 556320). Остальные 6 разбиты по 2 таблицы, то есть существует 3 района. у каждого района по 2 таблицы. По выбранному значению из первой таблицы(она является 7-ой таблицей), ищем соответствующие значения по первой таблице района, то есть дубликаты этих значений. Если такое значение есть в первой таблице района, смотрим что бы поле вторую таблицу района. Например: Выбранное значение из общей таблицы - 1234567, в цикле проверяем это значение в первых таблицах всех районов, если нашли в каком то районе, то идем во вторую таблицу и смотри там поле ххх, его значение может быть - 1, 2, 6. Если для найденного значения, поля ххх, в разных районах, одинаковы или или в пределах 1, 2, то он нам нужен. Таблицы районов связываются по полю ууу. Например : 1) 1 - ый район - значение - 1234567, ххх - 1 2 - ой район - значение - 1234567, ххх - 1 значение 1234567 нужно. 2) 1 - ый район - значение - 9876543, ххх - 1 2 - ой район - значение - 9876543, ххх - 6 значение 9876543 не нужно. Делаю вот так
Пробывал искусственно вводить такое значение в начало общей таблицы, все находит. Но если оно не в начале... Значения из общей таблицы перебирает примерно - одно значение в 5 секунд, всего значений 556320, ну соответсвтенно если вычислить время завершения...очень долго придется ждать. Как ускорить перебор значений? Что я неправильно делаю? Заранее спасибо. |
Автор: Vas 18.1.2010, 19:22 |
Иднексы + SQL запросы, должно быть быстрее, чем в цикле. И вложенные запросы попробуйте вынести отдельно, выполнить его, получить значения, а потом вставить ввиде строки со значениями для нахождения вхождения в множество (то бишь IN). Просто одному борланду известно как БДЕ работает со вложенными запросами, но что-то мне кажется что для каждой строки таблицы пытается выполняться подзапрос. |
Автор: marhatter 18.1.2010, 19:27 | ||||
то есть примерно так
???? |
Автор: marhatter 18.1.2010, 19:45 | ||||||
Не совсем понял, что вы имели в виду. |
Автор: Vas 19.1.2010, 08:12 |
Да примерно так, и еще для полей по которым делается отбор, создать индексы. |
Автор: marhatter 19.1.2010, 09:06 | ||
Для полей созданы индексы |