Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
Появилась такая задача. Запрос выполняется несколько долго, но хотелось бы начальные результаты работы видеть по мере его выполнения. Т.е. когда сервер выбрал строку, то сразу же отсылал её клиенту, а не дожидался окончания выполнения запроса, а только после этого все отсылал клиенту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2005, 01:16 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
Тянуть записи с сервера по одной можно юзая DECLARE CURSOR и FETCH. Но производительности это не поможет. Для производительности придется курить другие темы: индексы, статистику, планы, оптимизатор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2005, 11:37 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
2Vlado те вы хотите сказать что можно извлечь что нибудь из курсора раньше чем он был заполнен до конца? (что человеку спросившему собственно и надо) если да то можно примерчик, а то очень интересно как это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2005, 13:49 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
Нет. Такого я не говорил и не хотел, чесслово :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2005, 14:41 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы. Попробую ускорить выборку данных, чтобы задержки не ощущалось, и такой подход к решению проблемы (я про первый вопрос) был не востребован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 00:36 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
Если кому будет интересно. Пишу программу PostGreSQL+Delphi. К данным присоединялся через ADO-ODBC-PostGreSQL. И несколько минут назад в руки попали компоненты, напрямую работающие с библиотекой постгре. И результат налицо, если раньше запрос выполнялся на 58-65 секунд, то сейчас это время достигает 4-6 секунды. Я не знаю из-за чего такая разница, но это действительно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 02:44 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
приветствую а что за компоненты, если не секрет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 08:54 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
zeosdbo Там есть компоненты для многих баз: PostGreSQL, Oracle, MySql, DB2 and other. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 12:17 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 12:52 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
интересно а если ORDER BY??? как вы себе представляете это утверждение То есть первую строку постргес может отдать через полторы секунды, и последнюю - через две минуты. ORDER BY мне кажется всегда выполняется в конце и как тодга получить первую строку пока последней у меня еще и нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 19:04 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
ааа я понял ... да действительно можно наверное извлекать строки пока не выполнился весь запрос ... хотя многое зависит от оптимизатора и тп нада попробовать :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 19:16 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
vfabrинтересно а если ORDER BY??? как вы себе представляете это утверждение Скорее всего получить первую строку возможно, если в запросе нет агрегирующих функций и order by и т.п. Действительно надо пробывать. Прийду завтра на работу, попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 22:47 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 11:33 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
ну я думаю что тогда (в случае настройки оптимизатора) вся остальная выборка будет делаться медленее (в большинстве случаев) а сортировки ... если грамотно оптимизатор запинать то и ордер может не понадобится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 12:36 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
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-а), но не сломается! (результат останентся упорядоченным как требуется) или вы что-то другое имели в виду? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 13:13 |
|
||
|
Выборка данных
|
|||
|---|---|---|---|
|
#18+
AntonIggzeosdbo Там есть компоненты для многих баз: PostGreSQL, Oracle, MySql, DB2 and other. согласен) я тоже под дельфой с постгрей работаю) зеос рулит только он давно не обновлялся(((((( если если линк на новые релизы по поделитесь плз))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2005, 08:00 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33102422&tid=2007189]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 361ms |

| 0 / 0 |
