powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка данных
17 сообщений из 17, страница 1 из 1
Выборка данных
    #33101289
AntonIgg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Появилась такая задача.
Запрос выполняется несколько долго, но хотелось бы начальные результаты работы видеть по мере его выполнения. Т.е. когда сервер выбрал строку, то сразу же отсылал её клиенту, а не дожидался окончания выполнения запроса, а только после этого все отсылал клиенту
...
Рейтинг: 0 / 0
Выборка данных
    #33101375
Vlado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тянуть записи с сервера по одной можно юзая DECLARE CURSOR и FETCH.
Но производительности это не поможет.
Для производительности придется курить другие темы:
индексы, статистику, планы, оптимизатор.
...
Рейтинг: 0 / 0
Выборка данных
    #33101437
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Vlado

те вы хотите сказать что можно извлечь что нибудь из курсора раньше чем он был заполнен до конца? (что человеку спросившему собственно и надо)

если да то можно примерчик, а то очень интересно как это сделать.
...
Рейтинг: 0 / 0
Выборка данных
    #33101459
Vlado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет.
Такого я не говорил и не хотел, чесслово :)
...
Рейтинг: 0 / 0
Выборка данных
    #33101734
AntonIgg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за советы.
Попробую ускорить выборку данных, чтобы задержки не ощущалось, и такой подход к решению проблемы (я про первый вопрос) был не востребован.
...
Рейтинг: 0 / 0
Выборка данных
    #33101774
AntonIgg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кому будет интересно.
Пишу программу PostGreSQL+Delphi. К данным присоединялся через ADO-ODBC-PostGreSQL. И несколько минут назад в руки попали компоненты, напрямую работающие с библиотекой постгре. И результат налицо, если раньше запрос выполнялся на 58-65 секунд, то сейчас это время достигает 4-6 секунды. Я не знаю из-за чего такая разница, но это действительно так.
...
Рейтинг: 0 / 0
Выборка данных
    #33101914
lionson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
приветствую

а что за компоненты, если не секрет?
...
Рейтинг: 0 / 0
Выборка данных
    #33102330
AntonIgg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeosdbo

Там есть компоненты для многих баз: PostGreSQL, Oracle, MySql, DB2 and other.
...
Рейтинг: 0 / 0
Выборка данных
    #33102422
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladoТянуть записи с сервера по одной можно юзая DECLARE CURSOR и FETCH.
Но производительности это не поможет.Поможет. Поможет ускорить выдачу первых строк результата. Мы эту возможность раньше использовали на полную катушку. (Сейчас не используем, потому что кардинально ускорили поиск.) Вот пример. select count(*) from plprice_00;
count
---------
3463267
(1 row)

# explain analyze select * from plprice_00 where prod ilike '%ipaq%4700%' order by plno;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------
Index Scan using pk_prc_plno_00 on plprice_00 (cost=0.00..391011.03 rows=222 width=640) (actual time= 1627 .10.. 113337 .00 rows=475 loops=1)
Filter: (prod ~~* '%ipaq%4700%'::text)
Total runtime: 113338.70 msec
(3 rows)То есть первую строку постргес может отдать через полторы секунды, и последнюю - через две минуты.
vfabrможно примерчик, а то очень интересно как это сделать.Вроде бы так:$ time perl -e 'print "begin;\n"; print "declare c_plprice_00_0001 cursor for select * from plprice_00 where prod ilike \x27%ipaq%4700%\x27 order by plno;\n"; print "fetch forward 1 from c_plprice_00_0001;\n";' | psql -U pl -d pl
real 0m2.152s
user 0m0.010s
sys 0m0.000s
...
Рейтинг: 0 / 0
Выборка данных
    #33103492
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
интересно а если ORDER BY??? как вы себе представляете это утверждение

То есть первую строку постргес может отдать через полторы секунды, и последнюю - через две минуты.

ORDER BY мне кажется всегда выполняется в конце и как тодга получить первую строку пока последней у меня еще и нет?
...
Рейтинг: 0 / 0
Выборка данных
    #33103509
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ааа я понял ...

да действительно можно наверное извлекать строки пока не выполнился весь запрос ... хотя многое зависит от оптимизатора и тп

нада попробовать :-)
...
Рейтинг: 0 / 0
Выборка данных
    #33103651
AntonIgg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrинтересно а если ORDER BY??? как вы себе представляете это утверждение


Скорее всего получить первую строку возможно, если в запросе нет агрегирующих функций и order by и т.п.
Действительно надо пробывать. Прийду завтра на работу, попробую.
...
Рейтинг: 0 / 0
Выборка данных
    #33104316
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrда действительно можно наверное извлекать строки пока не выполнился весь запрос ... хотя многое зависит от оптимизатора и тпДа, можно. А оптимизатор надо пинать ногами, чтобы не мешал. :) (С помощью set enable_* to [on,off].) В приведенном мною примере в плане выполнения запроса нет Sort-а, хотя в тексте запроса Order By присутствует. Строки выдаются в требуемом порядке возрастания plno благодаря тому, что запрос работает по индексу (Index Scan) на plno (pk_prc_plno_00), а не по таблице (Seq Scan).
AntonIggСкорее всего получить первую строку возможно, если в запросе нет агрегирующих функций и order by и т.п.Быстро получить первые строки можно и в запросах с group by и order by. Для этого нужно, например, чтобы первая часть выражения в order by совпадала с выражением в group by, и чтобы существовал индекс первая часть которого совпадала бы с выражением в order by: index(f1,f2,f3,f4) group by f1,f2 order by f1,f2,f3 или index(f1,f2) group by f1,f2 order by f1,f2.
...
Рейтинг: 0 / 0
Выборка данных
    #33104586
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну я думаю что тогда (в случае настройки оптимизатора) вся остальная выборка будет делаться медленее (в большинстве случаев)

а сортировки ... если грамотно оптимизатор запинать то и ордер может не понадобится
...
Рейтинг: 0 / 0
Выборка данных
    #33104720
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrну я думаю что тогда (в случае настройки оптимизатора) вся остальная выборка будет делаться медленее (в большинстве случаев)да, зачастую так может получиться:
# set enable_seqscan to on;
SET
# explain analyze select * from plprice_00 where prod ilike '%ipaq%4700%' order by plno;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------
Sort (cost=226117.81..226118.36 rows=222 width=615) (actual time= 7011 .74.. 7012 .05 rows=494 loops=1)
Sort Key: plno
-> Seq Scan on plprice_00 (cost=0.00..226109.14 rows=222 width=615) (actual time=66.19..7002.57 rows=494 loops=1)
Filter: (prod ~~* '%ipaq%4700%'::text)
Total runtime: 7012.44 msec
(5 rows)
# set enable_seqscan to off;
SET
# explain analyze select * from plprice_00 where prod ilike '%ipaq%4700%' order by plno;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------
Index Scan using pk_prc_plno_00 on plprice_00 (cost=0.00..332902.24 rows=222 width=615) (actual time= 254 .00.. 16325 .67 rows=494 loops=1)
Filter: (prod ~~* '%ipaq%4700%'::text)
Total runtime: 16326.93 msec
(3 rows)0.25 сек < 7 сек < 16 сек
vfabrа сортировки ... если грамотно оптимизатор запинать то и ордер может не понадобитсядаже если сейчас получилось запинать оптимизатор на нужный план выполнения запроса (допустим по индексу), условие order by, кажущееся теперь ненужным, из текста запроса убирать нельзя. на тот случай, если вдруг когда-нибудь в будущем оптимизатор вздумает выбрать для этого запроса другой план, то у вас запрос замедлится (допустим из-за Sort-а), но не сломается! (результат останентся упорядоченным как требуется) или вы что-то другое имели в виду? :)
...
Рейтинг: 0 / 0
Выборка данных
    #33106274
nig_AM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonIggzeosdbo

Там есть компоненты для многих баз: PostGreSQL, Oracle, MySql, DB2 and other.

согласен)
я тоже под дельфой с постгрей работаю)
зеос рулит только он давно не обновлялся((((((
если если линк на новые релизы по поделитесь плз)))
...
Рейтинг: 0 / 0
Выборка данных
    #33106872
AntonIgg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nig_AMесли если линк на новые релизы по поделитесь плз)))
У меня версия zeosdbo-6.5.1-alpha. Линка не знаю, но могу, если надо, на мыло скинуть.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]