![]() |
|
![]() ![]() ![]() |
|
marhatter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 8.5.2008 Репутация: нет Всего: нет |
Здравствуйте. Тип базы данных - 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 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Иднексы + SQL запросы, должно быть быстрее, чем в цикле. И вложенные запросы попробуйте вынести отдельно, выполнить его, получить значения, а потом вставить ввиде строки со значениями для нахождения вхождения в множество (то бишь IN).
Просто одному борланду известно как БДЕ работает со вложенными запросами, но что-то мне кажется что для каждой строки таблицы пытается выполняться подзапрос. Это сообщение отредактировал(а) Vas - 18.1.2010, 19:28 -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
marhatter |
|
||||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 8.5.2008 Репутация: нет Всего: нет |
то есть примерно так
???? Это сообщение отредактировал(а) marhatter - 18.1.2010, 19:40 |
||||
|
|||||
marhatter |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 8.5.2008 Репутация: нет Всего: нет |
Не совсем понял, что вы имели в виду. |
||||||
|
|||||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Да примерно так, и еще для полей по которым делается отбор, создать индексы.
-------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
marhatter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 8.5.2008 Репутация: нет Всего: нет |
Для полей созданы индексы |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |