Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2008, 10:33   #1
Ramires
Пользователь
 
Аватар для Ramires
 
Регистрация: 23.07.2008
Сообщений: 69
По умолчанию Как ускорить работу с сетевой БД

Добрый День!
Подскажите пожалуйста как быть..
Занимаясь согласованием двух таблиц разных бд столкнулся вот с чем:
i:=0;
AdoQuery1.SQL.Text:='SELECT Code FROM Tabl1';
AdoQuery1.Open;
while not AdoQuery1.Eof do
begin
inc(i);
AdoQuery1.Next;
end;
AdoQuery1.Close;
..замечу что в цикле будет не подсчет записей, а само сравнение с записями другой таблицы.. так вот в таблице Tabl1 находится 800000 записей.. И только вот такой переход на след. запись AdoQuery1.Next; занимает порядком 5 минут на 600-700 записей, и чем дальше тем медленнее..
СУБД MSSQL 2000.
AdoQuery1 связывал с AdoConnection, а также делал напрямую через ConnectionString разницы никакой..
Подскажите как можно ускорить?
I like beer.. more beer..
Ramires вне форума Ответить с цитированием
Старый 21.08.2008, 11:04   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

отказываться от идеи вытягивать миллион записей на клиента!!
Например, написать хранимую процедуру, чтобы сервер обрабатывал и сравнивал записи у себя внутри.
Или, если по другому никак нельзя (ну, например, сравнение идёт с данными, которые есть только на клиенте), тогда расслабится и ждать, ждать, ждать.. (минуты, часы, дни... :-( )

p.s. Ну, возможно поможет создание индекса по полю Code... но, повторю, тянуть записи на клиента — это неверная дорога... Road to Hell... ;-(
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.08.2008, 11:59   #3
Ramires
Пользователь
 
Аватар для Ramires
 
Регистрация: 23.07.2008
Сообщений: 69
По умолчанию

Спасибо Сергей, я конечно рассматривал как вариант написание хранимой процедуры.. но все же надеялся на решение средствами Адо, так как опыт написание хранимых процедур не велик.
Но все же в гугле нашел я ссылочку на решение почти такой же проблемы.. однако подробного описания никто не привел.. лишь намек на то что нужно использовать AdoDataSet..
I like beer.. more beer..
Ramires вне форума Ответить с цитированием
Старый 21.08.2008, 12:16   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я вообще этого кода не пойму...
Почему бы просто не сделать JOIN запрос?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ускорить загрузку битмапа в tImage Altera Мультимедиа в Delphi 10 24.03.2008 17:39
Как ускорить выполнение макросов tat-besidovska Microsoft Office Excel 1 22.01.2008 12:12
Помогите пожалуйста ускорить работу по реконструкции моста Геодезистка Помощь студентам 10 07.10.2007 00:05