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

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

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

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

Там есть компоненты для многих баз: PostGreSQL, Oracle, MySql, DB2 and other.
...
Рейтинг: 0 / 0
06.06.2005, 12:52
    #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
06.06.2005, 19:04
    #33103492
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных
интересно а если ORDER BY??? как вы себе представляете это утверждение

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

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

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

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


Скорее всего получить первую строку возможно, если в запросе нет агрегирующих функций и order by и т.п.
Действительно надо пробывать. Прийду завтра на работу, попробую.
...
Рейтинг: 0 / 0
07.06.2005, 11:33
    #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
07.06.2005, 12:36
    #33104586
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных
ну я думаю что тогда (в случае настройки оптимизатора) вся остальная выборка будет делаться медленее (в большинстве случаев)

а сортировки ... если грамотно оптимизатор запинать то и ордер может не понадобится
...
Рейтинг: 0 / 0
07.06.2005, 13:13
    #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
08.06.2005, 08:00
    #33106274
nig_AM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных
AntonIggzeosdbo

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

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


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