ADO в Delphi
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Минуточку, а сколько времени занимает Ctrl-PgDown (Т.е. полный фетч) при просмотре полученного рекордсета?
Запрос в Query Analyzere длится 1 секунду. По Ctrl+End моментом перехожу на последнюю строку. Запрос:
select ContactID from membership where groupID=<число>
Собственно, разница во времени выполнения и натолкнула на мысль о потере производительности в так сказать бутерброде из ADO и ODBC.
select ContactID from membership where groupID=<число>
Собственно, разница во времени выполнения и натолкнула на мысль о потере производительности в так сказать бутерброде из ADO и ODBC.
Филь глюк!
miland, просто ради интереса: запусти тот же запрос на чистом OLE DB (?) драйвере для MS SQL Server'a...
Даже самый дурацкий замысел можно воплотить мастерски
Лучшая производительность: ADO + MS SQL-сервер
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Ни за что не поверю, что 150тыс записей фетчатся мгновенно (даже если база локальная).Запрос в Query Analyzere длится 1 секунду. По Ctrl+End моментом перехожу на последнюю строку. Запрос:
select ContactID from membership where groupID=<число>
Виноват, Ctrl-End не показатель, так как более или менее умные приложения могут производить поиск последней записи используя или строя обратные индексы.
Naeel Maqsudov, всё очень просто - время выполнения запроса на сервере действительно очень маленькое. Время же выфетчивания резалтсета стандартными средствами не учитывается.
Т.е. для чистоты эксперимента нужно писать что то вроде этого:
declare @start datetime
select @start = date()
select * from...
select datediff('millisec', date(), @start)
Сорри за неточности, давненько шашек в руках не держал
Этот запрос нужно завернуть в хранимую процедуру и запустить таймер перед её запуском в Delphi и остановить после.
Разница между тем, что вернёт процедура в консоли и в программе на Delphi на одной и той же машине как раз и будет отображать степень тормознутости связки ADO+Delphi. Если тебе удается выфетчить в консколи 150К записей меньше чем за секунду, то в 3 секунды в дельфи ты всяко должен уложиться...
Но есть у меня большие подозрения, что всё это ты отливаешь в какой-нибудь грид и всё время расходуется на его перерисовку...
Т.е. для чистоты эксперимента нужно писать что то вроде этого:
declare @start datetime
select @start = date()
select * from...
select datediff('millisec', date(), @start)
Сорри за неточности, давненько шашек в руках не держал

Этот запрос нужно завернуть в хранимую процедуру и запустить таймер перед её запуском в Delphi и остановить после.
Разница между тем, что вернёт процедура в консоли и в программе на Delphi на одной и той же машине как раз и будет отображать степень тормознутости связки ADO+Delphi. Если тебе удается выфетчить в консколи 150К записей меньше чем за секунду, то в 3 секунды в дельфи ты всяко должен уложиться...
Но есть у меня большие подозрения, что всё это ты отливаешь в какой-нибудь грид и всё время расходуется на его перерисовку...
Даже самый дурацкий замысел можно воплотить мастерски
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Фетч не связан с перерисовкой, так как Table1.Last не по одной же записи щелкает до последней, а делает поиск переход на букмарк, причем все это заключено в Disable/EnableControls.Но есть у меня большие подозрения, что всё это ты отливаешь в какой-нибудь грид и всё время расходуется на его перерисовку...
Возможно. Надо пробовать.то в 3 секунды в дельфи ты всяко должен уложиться
Naeel Maqsudov, собственно в предыдущем сообщении я забыл переключится на miland'a 

Даже самый дурацкий замысел можно воплотить мастерски
Возникла та же проблема - с длительностью выборки, но уже с подключением dBase-базы.
Никто не справился случайно с задачей?
Заметил, что при выборке создается временной файл размером запрашиваемой бызы.
Где-то вычитал,что если установить свойство clUseServer "все будет пучком".
А если сама база на сервере, где будет создаваться tmp-файл?
Никто не справился случайно с задачей?
Заметил, что при выборке создается временной файл размером запрашиваемой бызы.
Где-то вычитал,что если установить свойство clUseServer "все будет пучком".
А если сама база на сервере, где будет создаваться tmp-файл?