Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
Приветы! есть кpайне пpостой запpос, котоpый считывает данные из 4 связанных таблиц за некотоpый пpомежyток вpемени (сеpвеp - MSSQL 2000). по всем "нyжным" полям индексы сделаны, imho оптимизиpовать дальше некyда. вот сам запpос: SELECT T_TRAIN.*,T_TRAIN_KTSM.*,T_VAGON.*,T_OST.* FROM T_TRAIN LEFT JOIN T_TRAIN_KTSM ON T_TRAIN.TrUniqueNum = T_TRAIN_KTSM.TrUniqueNum LEFT JOIN T_VAGON ON T_TRAIN.TrUniqueNum = T_VAGON.TrUniqueNum LEFT JOIN T_OST ON T_VAGON.VagUniqueNum = T_OST.VagUniqueNum WHERE (T_TRAIN.TrSpdDT >= '20020114') and (T_TRAIN.TrSpdDT < '20020115') ORDER BY T_TRAIN.TrUniqueNum все "UniqueNum" - identity PK TrSpdDT - индекс возвpащаемый набоp данных - 8409 стpок с pазмеpом 393 байт если я выполняю запpос в Query Analyzer (соответственно, чеpез ADO), то вpемя выполнения запpоса занимает в сpеднем 30 секyнд, после этого я могy pаботать со всем набоpом данных. если же я выполняю запpос в SQL Explorer (чеpез BDE), то вpемя выполнения запpоса занимает не больше 5 секyнд, но после выполнения запpоса я могy pаботать только с некотоpой поpцией набоpа данных, а, скажем, пеpемещение в конец набоpа данных займет некотоpое вpемя, но все pавно не оцень значительное. я стал тpассиpовать выполнение запpоса обоими методами с помощью SQL Profiler'а, и обнаpyжил pазличие в тpассах (см. ниже). кто мне это обьяснит? SQL Query Analyzer: EventClass StartTime TextData CPU Reads Writes Duration -+--------------------------------------------------------------------------- SQL:BatchStarting 09:39:09.677 SELECT ... SQL:StmtStarting 09:39:09.797 SELECT ... Audit Object Permission Event 09:39:09.797 SELECT ... Audit Object Permission Event 09:39:09.797 SELECT ... Audit Object Permission Event 09:39:09.797 SELECT ... Audit Object Permission Event 09:39:09.797 SELECT ... Degree of Parallelism (7.0 Insert) 09:39:09.797 Execution Plan 09:39:09.807 Execution Tree Show Plan All 09:39:09.807 Show Plan Text 09:39:09.807 SQLTransaction 09:39:09.807 SQLTransaction 09:39:09.807 1020 SQLTransaction 09:39:17.117 SQLTransaction 09:39:17.117 27570 Show Plan Statistics 09:39:44.687 SQL:StmtCompleted 09:39:09.797 SELECT ... 6280 47804 0 34900 SQL:BatchCompleted 09:39:09.677 SELECT ... 6370 47938 0 35170 SQL Explorer: EventClass StartTime TextData CPU Reads Writes Duration -+--------------------------------------------------------------------------- SQLTransaction 09:36:19.400 229300 SQL:BatchCompleted 09:36:00.703 SELECT ... 6680 47828 0 248006 Attention 09:40:08.710 SQL:BatchStarting 09:40:08.860 SELECT ... SQL:StmtStarting 09:40:08.960 SELECT ... Audit Object Permission Event 09:40:08.960 SELECT ... Audit Object Permission Event 09:40:08.960 SELECT ... Audit Object Permission Event 09:40:08.960 SELECT ... Audit Object Permission Event 09:40:08.960 SELECT ... Degree of Parallelism (7.0 Insert) 09:40:08.960 Execution Plan 09:40:08.960 Execution Tree Show Plan All 09:40:08.980 Show Plan Text 09:40:08.980 SQLTransaction 09:40:08.990 SQLTransaction 09:40:08.990 663 SQLTransaction 09:40:14.340 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2002, 06:18 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
Все просто. BDE по-умолчанию фетчит не весь набор, а только небольшую часть, дофетчивая остальное по мере необходимости. ADO при клиентском курсоре фетчит сразу весь набор данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2002, 06:42 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
>BDE по-умолчанию фетчит не весь набор, а только небольшую часть, дофетчивая остальное >по мере необходимости. ADO при клиентском курсоре фетчит сразу весь набор данных. а ADO можно заставить так же работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2002, 07:17 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
В ADO, кстати тоже можно реализовывать асинхронный доступ к данным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2002, 07:18 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
не понял, BDE использует серверный курсор??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2002, 07:23 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
>BDE по-умолчанию фетчит не весь набор, а только небольшую часть, дофетчивая остальное >по мере необходимости. ADO при клиентском курсоре фетчит сразу весь набор данных. а ADO можно заставить так же работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2002, 08:11 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
> не понял, BDE использует серверный курсор??? Незафетчивание и серверный курсор разные вещи, хотя и несколько похожие. > а ADO можно заставить так же работать? Можно, но не нужно. Запросил - забери, что запросил. Только такая работа с sql-сервером корректна. Ограничивай выборки критериями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2002, 11:54 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
>> а ADO можно заставить так же работать? >Можно, но не нужно. Запросил - забери, что запросил. >Только такая работа с sql-сервером корректна. >Ограничивай выборки критериями. условия такие, что надо загружать данные из годичного архива. архив весь в 4-х связанных таблицах (см. первое письмо), критерий один - промежуток времени, за который нужны эти данные. в принципе скорость загрузки можно повысить, если архив за год хранить не в одном, а в нескольких наборах таблиц. но так мне не очень нравится! тут кто-то говорил, что в АДО можно сделать асинхронный запрос. как? я использую Delphi, нашел у TADODataSet есть свойство ExecuteOptions типа set of (eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking, eoExecuteNoRecords). и как им грамотно пользоваться? в хелпе практически пусто, примеров нету... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2002, 12:26 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
Асинхронное выполнение команд не приводит к увеличению скорости их выполнения. Скорее, наоборот. Просто, пока выполняется асинхронная команда, ты можешь не ожидая завершения ее выполнения в своем приложении делать что-то еще (например, запустить на время ожидания микротетрис), периодически опрашивая статус выполнения команды. Когда статус команды перейдет в выполненый (завершен успешно, либо аварийно), можно заглянуть в результаты. Использование серверного курсора имеет свои преимущества и недостатки. Работа порциями - свои (и преимущества и недостатки). В любом случае, если нет необходимости закачивать на клиент весь массив информации (просто потому, что глазами его никто просматривать не собирается), так и не нужно это делать. Ограничь выборку по какому-либо условию. Если же получение всего объема информации жизненно необходимо, то и нечего морочиться с серверным курсором и бить информацию на порции. Все эти кувыркания в итоге только замедлят получение на клиенте суммарного объема информации. И вообще, для хранения больших объемов информации и получения статистических выборок по давно прошедшим периодам специально придуман OLAP. Так что, может, не стОит изобретать велосипед? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2002, 15:57 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
> ...периодически опрашивая статус выполнения команды. Garya, избавтесь наконец от догм структурного программирования! В ADO инкапсулирована отличная модель событий! Ничего не надо опрашивать, чуточку колдовства с кодом - и завершение процедуры вызывает событие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2002, 16:16 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
>Асинхронное выполнение команд не приводит к увеличению скорости их выполнения. дык это я понимаю, не дурак >Скорее, наоборот. Просто, пока выполняется асинхронная команда, ты можешь не ожидая >завершения ее выполнения в своем приложении делать что-то еще (например, запустить на время >ожидания микротетрис), периодически опрашивая статус выполнения команды. можно по-подробней, с примерами на Delphi? я и так запускаю выполнение запроса в отдельном thread'е, но вот процент выполнения запроса не получается посчитать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2002, 04:13 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
2 SysOp. Привет! В общем-то, твоя поправка правильная. Просто не хотелось утопать в подробностях, о которых теперь заходит разговор. Действительно, в ADO имеются события, и работу можно построить по событию заверщения операции. Тем не менее, инкапсулированные в ADO прибамбасы именно так и работают, как я описал - то есть, организуют цикл проверки статуса (проверено). Так что по сути, с точки зрения использования процессора большой разницы нет, использовать объектно-ориентированное программирование или структурное. По сути заданного вопроса могу сказать следующее. Используя в Delphi набор стандартно поставляемых компонент из палитры компонентов, можно реализовать только структурное программирование (по сути замечания SysOp). Для работы с событиями необходимо напрямую работать с интерфейсом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2002, 13:14 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
В дельфах у ADODataSet есть свойство CursorLocation, которое может принимать значение clUseClient и clUseServer. Серверный курсор берет порциями. А с этими вагонами... Обычно пользователям не нужен список, а только какая-то статистика за период времени. И если они говорят, что им надо все, то они ошибаются. Если же они вынуждены что-то выбирать глядя на экран, то это Ваша недоработка. Про вагоны сужу профессионально. И у меня есть такие недработки, уж очень в вагонном хозяйстве все запутано. Рабочее мыло, коллега, vchd19kulakov@ptrz.orw.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2002, 04:49 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
2 Garya. Hi! >Тем не менее, инкапсулированные в ADO прибамбасы именно так и работают, как я описал - то есть, организуют цикл проверки статуса (проверено). А вот это для меня новость. Сервер возвращает информацию о завершении, обработку которого логично было бы использовать для генерации события. Кстати, как Вы выявили механизм проверки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2002, 07:09 |
|
||
|
ADO vs BDE - как выполняется запрос?
|
|||
|---|---|---|---|
|
#18+
Событие генерит используемая на клиенте библиотека ADO. Внутри она работает через методы и свойства OLEDB, периодически опрашивая статус. Проверял не я - мой напарник. Подробностей привести не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2002, 15:39 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32027520&tid=1823089]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 424ms |

| 0 / 0 |
