powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Что можно сделать для сокращения времени обработки запроса?
25 сообщений из 69, страница 2 из 3
Что можно сделать для сокращения времени обработки запроса?
    #39265811
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhson <>
а в вашем тесте не понял
<>
а как дысал, как дысал !
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39265813
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
explain (analyze on, verbose on, costs on, buffers on, timing on)
select id, var from t12 order by id limit 10;
                                                             QUERY PLAN                                                             
------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.29..0.61 rows=10 width=12) (actual time=0.018..0.023 rows=10 loops=1)
   Output: id, var
   Buffers: shared hit=3
   ->  Index Scan using t12_ind on public.t12  (cost=0.29..3148.29 rows=100000 width=12) (actual time=0.018..0.022 rows=10 loops=1)
         Output: id, var
         Buffers: shared hit=3
 Planning time: 0.097 ms
 Execution time: 0.040 ms



чудеса! Берёт то, чего в индексе нет.

Судя по всему шаг table access by rowid план просто не пишет ( а он явно есть)
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39265815
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
п.с. прекратите уже паясничать. Не два по третьему.
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39265828
its_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А мне это поможет?)
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39265834
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
its_meА мне это поможет?)зависит от вас.

просто демонстрируется факт, что для нахождения некоторых первых записей не надо строить весь набор, сортировать и выбирать первые.

если вы знаете, как заранее можно обрезать выборку -- это может помочь.

в вашем случае индексов нет, но есть другой способ обхода множества из 181*181 записей, думается. Если конечно фильтр, как назло, не подавляет всё в начале и пропускает только в конце перебора. (т.е. не коррелирует с обходом).
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39265838
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhsonп.с. прекратите уже паясничать.
свободен,
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39265855
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JonhsonСудя по всему шаг table access by rowid план просто не пишет ( а он явно есть)
Вам неоднократно говорили — прочитайте уже, наконец, документацию.
И не ждите ORACLE-их фич, это другая СУБД.
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266050
its_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На чём я остановился пока:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
with bus_points AS (
  select osm_id, way from opengeo.ru_psk_point where public_transport='stop_position' and tags -> 'bus' = 'yes'
),
various_sum AS (
 select * from (
  select (dist_start+dist_end) as sum_dist from 
  (select osm_id as id_start, way as start_way, ST_Distance_Spheroid(ST_Transform(way,4326), ST_GeomFromText('POINT(28.2789393 57.8155523)',4326), 'SPHEROID["WGS 84",6378137,298.257223563]') as dist_start from bus_points order by dist_start) t1,
  (select osm_id as id_end, way as end_way, ST_Distance_Spheroid(ST_Transform(way,4326), ST_GeomFromText('POINT(28.2951125 57.8141805)',4326), 'SPHEROID["WGS 84",6378137,298.257223563]') as dist_end from bus_points order by dist_end) t2,
  opengeo.ru_psk_rels rels 
  where array[id_start,id_end]<@rels.parts 
  and array['route','ref']<@rels.tags 
  and bus_idx_rels_parts(rels.id,id_start)<bus_idx_rels_parts(rels.id,id_end) limit 10
 ) t order by sum_dist limit 1 
)
select 
id_start,start_way,dist_start,id_end,end_way,dist_end
,(dist_start+dist_end) as sum_dist 
from 
(select osm_id as id_start, way as start_way, ST_Distance_Spheroid(ST_Transform(way,4326), ST_GeomFromText('POINT(28.2789393 57.8155523)',4326), 'SPHEROID["WGS 84",6378137,298.257223563]') as dist_start from bus_points order by dist_start) t1,
(select osm_id as id_end, way as end_way, ST_Distance_Spheroid(ST_Transform(way,4326), ST_GeomFromText('POINT(28.2951125 57.8141805)',4326), 'SPHEROID["WGS 84",6378137,298.257223563]') as dist_end from bus_points order by dist_end) t2,
opengeo.ru_psk_rels rels 
where array[id_start,id_end]<@rels.parts 
and array['route','ref']<@rels.tags 
and bus_idx_rels_parts(rels.id,id_start)<bus_idx_rels_parts(rels.id,id_end) --limit 1
and (dist_start+dist_end)<=(select sum_dist from various_sum)
order by sum_dist limit 1;



Анализ:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
"Limit  (cost=572.46..572.47 rows=1 width=96) (actual time=534.149..534.155 rows=1 loops=1)"
"  CTE bus_points"
"    ->  Bitmap Heap Scan on ru_psk_point  (cost=5.67..496.49 rows=1 width=136) (actual time=0.178..2.257 rows=181 loops=1)"
"          Recheck Cond: (public_transport = 'stop_position'::text)"
"          Filter: ((tags -> 'bus'::text) = 'yes'::text)"
"          Rows Removed by Filter: 5"
"          ->  Bitmap Index Scan on pt_only  (cost=0.00..5.67 rows=186 width=0) (actual time=0.102..0.102 rows=186 loops=1)"
"                Index Cond: (public_transport = 'stop_position'::text)"
"  CTE various_sum"
"    ->  Limit  (cost=37.98..37.98 rows=1 width=8) (actual time=48.827..48.832 rows=1 loops=1)"
"          ->  Sort  (cost=37.98..37.98 rows=1 width=8) (actual time=48.814..48.814 rows=1 loops=1)"
"                Sort Key: (((st_distance_spheroid(st_transform(bus_points.way, 4326), '0101000020E6100000B311E39068473C40BB568C0464E84C40'::geometry, 'SPHEROID("WGS 84",6378137,298.257223562997)'::spheroid)) + (st_distance_spheroid(st_transform(bus_points.way, 4326), '0101000020E61000000B24287E8C4B3C403D450E1137E84C40'::geometry, 'SPHEROID("WGS 84",6378137,298.257223562997)'::spheroid))))"
"                Sort Method: top-N heapsort  Memory: 17kB"
"                ->  Limit  (cost=33.39..37.96 rows=1 width=16) (actual time=20.580..48.717 rows=10 loops=1)"
"                      ->  Nested Loop  (cost=33.39..37.96 rows=1 width=16) (actual time=20.566..48.562 rows=10 loops=1)"
"                            ->  Nested Loop  (cost=0.57..0.61 rows=1 width=32) (actual time=12.754..16.386 rows=182 loops=1)"
"                                  ->  Sort  (cost=0.28..0.29 rows=1 width=40) (actual time=6.332..6.338 rows=2 loops=1)"
"                                        Sort Key: (st_distance_spheroid(st_transform(bus_points.way, 4326), '0101000020E6100000B311E39068473C40BB568C0464E84C40'::geometry, 'SPHEROID("WGS 84",6378137,298.257223562997)'::spheroid))"
"                                        Sort Method: quicksort  Memory: 29kB"
"                                        ->  CTE Scan on bus_points  (cost=0.00..0.27 rows=1 width=40) (actual time=1.538..4.760 rows=181 loops=1)"
"                                  ->  Sort  (cost=0.28..0.29 rows=1 width=40) (actual time=3.204..3.800 rows=91 loops=2)"
"                                        Sort Key: (st_distance_spheroid(st_transform(bus_points.way, 4326), '0101000020E61000000B24287E8C4B3C403D450E1137E84C40'::geometry, 'SPHEROID("WGS 84",6378137,298.257223562997)'::spheroid))"
"                                        Sort Method: quicksort  Memory: 29kB"
"                                        ->  CTE Scan on bus_points  (cost=0.00..0.27 rows=1 width=40) (actual time=1.679..4.844 rows=181 loops=1)"
"                            ->  Bitmap Heap Scan on ru_psk_rels rels  (cost=32.82..37.34 rows=1 width=86) (actual time=0.157..0.159 rows=0 loops=182)"
"                                  Recheck Cond: ((ARRAY[bus_points.osm_id, bus_points.osm_id] <@ parts) AND ('{route,ref}'::text[] <@ tags))"
"                                  Filter: (bus_idx_rels_parts(id, bus_points.osm_id) < bus_idx_rels_parts(id, bus_points.osm_id))"
"                                  Rows Removed by Filter: 0"
"                                  ->  BitmapAnd  (cost=32.82..32.82 rows=1 width=0) (actual time=0.108..0.108 rows=0 loops=182)"
"                                        ->  Bitmap Index Scan on idx_ru_psk_rels_gin_parts  (cost=0.00..12.23 rows=31 width=0) (actual time=0.020..0.020 rows=1 loops=182)"
"                                              Index Cond: (ARRAY[bus_points.osm_id, bus_points.osm_id] <@ parts)"
"                                        ->  Bitmap Index Scan on idx_ru_psk_rels_gin_tags  (cost=0.00..20.33 rows=44 width=0) (actual time=0.210..0.210 rows=499 loops=60)"
"                                              Index Cond: ('{route,ref}'::text[] <@ tags)"
"  InitPlan 3 (returns $4)"
"    ->  CTE Scan on various_sum  (cost=0.00..0.02 rows=1 width=8) (actual time=48.841..48.859 rows=1 loops=1)"
"  ->  Sort  (cost=37.97..37.98 rows=1 width=96) (actual time=534.123..534.123 rows=1 loops=1)"
"        Sort Key: (((st_distance_spheroid(st_transform(bus_points.way, 4326), '0101000020E6100000B311E39068473C40BB568C0464E84C40'::geometry, 'SPHEROID("WGS 84",6378137,298.257223562997)'::spheroid)) + (st_distance_spheroid(st_transform(bus_points.way, 4326), '0101000020E61000000B24287E8C4B3C403D450E1137E84C40'::geometry, 'SPHEROID("WGS 84",6378137,298.257223562997)'::spheroid))))"
"        Sort Method: top-N heapsort  Memory: 17kB"
"        ->  Nested Loop  (cost=33.39..37.96 rows=1 width=96) (actual time=71.832..534.041 rows=7 loops=1)"
"              ->  Nested Loop  (cost=0.57..0.61 rows=1 width=96) (actual time=66.092..530.417 rows=5 loops=1)"
"                    Join Filter: (((st_distance_spheroid(st_transform(bus_points.way, 4326), '0101000020E6100000B311E39068473C40BB568C0464E84C40'::geometry, 'SPHEROID("WGS 84",6378137,298.257223562997)'::spheroid)) + (st_distance_spheroid(st_transform(bus_points.way, 4326), '0101000020E61000000B24287E8C4B3C403D450E1137E84C40'::geometry, 'SPHEROID("WGS 84",6378137,298.257223562997)'::spheroid))) <= $4)"
"                    Rows Removed by Join Filter: 32756"
"                    ->  Sort  (cost=0.28..0.29 rows=1 width=40) (actual time=10.708..12.019 rows=181 loops=1)"
"                          Sort Key: (st_distance_spheroid(st_transform(bus_points.way, 4326), '0101000020E6100000B311E39068473C40BB568C0464E84C40'::geometry, 'SPHEROID("WGS 84",6378137,298.257223562997)'::spheroid))"
"                          Sort Method: quicksort  Memory: 29kB"
"                          ->  CTE Scan on bus_points  (cost=0.00..0.27 rows=1 width=40) (actual time=2.028..8.981 rows=181 loops=1)"
"                    ->  Sort  (cost=0.28..0.29 rows=1 width=40) (actual time=0.042..1.267 rows=181 loops=181)"
"                          Sort Key: (st_distance_spheroid(st_transform(bus_points.way, 4326), '0101000020E61000000B24287E8C4B3C403D450E1137E84C40'::geometry, 'SPHEROID("WGS 84",6378137,298.257223562997)'::spheroid))"
"                          Sort Method: quicksort  Memory: 29kB"
"                          ->  CTE Scan on bus_points  (cost=0.00..0.27 rows=1 width=40) (actual time=1.746..4.898 rows=181 loops=1)"
"              ->  Bitmap Heap Scan on ru_psk_rels rels  (cost=32.82..37.34 rows=1 width=86) (actual time=0.614..0.681 rows=1 loops=5)"
"                    Recheck Cond: ((ARRAY[bus_points.osm_id, bus_points.osm_id] <@ parts) AND ('{route,ref}'::text[] <@ tags))"
"                    Filter: (bus_idx_rels_parts(id, bus_points.osm_id) < bus_idx_rels_parts(id, bus_points.osm_id))"
"                    Rows Removed by Filter: 1"
"                    ->  BitmapAnd  (cost=32.82..32.82 rows=1 width=0) (actual time=0.188..0.188 rows=0 loops=5)"
"                          ->  Bitmap Index Scan on idx_ru_psk_rels_gin_parts  (cost=0.00..12.23 rows=31 width=0) (actual time=0.027..0.027 rows=2 loops=5)"
"                                Index Cond: (ARRAY[bus_points.osm_id, bus_points.osm_id] <@ parts)"
"                          ->  Bitmap Index Scan on idx_ru_psk_rels_gin_tags  (cost=0.00..20.33 rows=44 width=0) (actual time=0.232..0.232 rows=499 loops=3)"
"                                Index Cond: ('{route,ref}'::text[] <@ tags)"
"Total runtime: 534.409 ms"


Результат есть, но меня пугает то, что записи в таблицах, таких как ru_psk_point, ru_psk_rels, будут пополняться и значительно(в разы чем сейчас).
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266119
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
its_me,
[thy. yt rjvvtynbhe.


PS
однако вот такое вот вам не приходило в голову :

Код: sql
1.
SELECT array[1,1] <@ array [1,2,3]


т.е. если вы не можете усечь перебор до треугольника -- м.б. хотя бы диагональ явно выколоть, а не неизвестно сколько исполняемой ф--ей ?

да ,если выложите в свободное место свои таблички, -- м.б. кто--то не поленится их покрутить. а так -- нет.
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266147
its_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Я херню комментирую).
Про массивы пока не дошло.
Про выкладывания - я ссылку кидал уже выше:
https://www.dropbox.com/s/pbtn1qhgioruqh3/backup_tables.7z?dl=0
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266162
its_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ещё:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR REPLACE FUNCTION bus_idx_rels_parts(IN bigint, IN bigint, OUT idx integer)
RETURNS integer AS
' SELECT idx from opengeo.ru_psk_rels_parts_idx where id=$1 and unnest=$2 '
LANGUAGE sql VOLATILE
COST 100;

CREATE INDEX ru_psk_prels_parts_idx_id
  ON ru_psk_rels_parts_idx
  USING btree
  (id, unnest);

select id,parts,unnest(parts)::varchar as unnest, generate_subscripts(parts,1) as idx INTO ru_psk_rels_parts_idx from ru_psk_rels
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266205
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
its_meqwwq,

Я херню комментирую).
не льстите себе, мсье. вы её пишете

its_meПро массивы пока не дошло. пичаль. на хабре или их гите щас хорошая статья про микроцефалию новых поколений.
its_meПро выкладывания - я ссылку кидал уже выше:
https://www.dropbox.com/s/pbtn1qhgioruqh3/backup_tables.7z?dl=0 это говно настойчиво хочет от меня логина. приходится им писать в поле логина "кто вы такие, чего вам надо, ..." далее -- по известному мему.
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266211
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
its_meещё:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR REPLACE FUNCTION bus_idx_rels_parts(IN bigint, IN bigint, OUT idx integer)
RETURNS integer AS
' SELECT idx from opengeo.ru_psk_rels_parts_idx where id=$1 and unnest=$2 '
LANGUAGE sql VOLATILE
COST 100;

CREATE INDEX ru_psk_prels_parts_idx_id
  ON ru_psk_rels_parts_idx
  USING btree
  (id, unnest);

select id,parts,unnest(parts)::varchar as unnest, generate_subscripts(parts,1) as idx INTO ru_psk_rels_parts_idx from ru_psk_rels


это не оракел. не надо подменять sql ф--ями.
хотя оно у вас секъюрити инвокер, должно встраиваться в план как подзапрос.
могли еще стейблом сделать.
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266233
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

Скачать можно, если в окне регистрации нажать ссылгу "Мне пофиг" (внизу), вверху-справа нажать "Скачать".
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266234
its_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Мне трудно говорить с человеком который говорит сам с собой...
Раньше больше/преимущественно ораклом занимался.
Попробуйте эту ссылку(редко требуется передавать файлы по ссылкам):
http://filecloud.me/s53lmqzwgtaa.html
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266304
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
its_me,

У вас в запросе функция, которой нет в дампе: bus_idx_rels_parts
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266326
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
its_meqwwq,

Мне трудно говорить с человеком который говорит сам с собой...
если вы чего--то не поняли, это не проблема собеседника.


хорошая для вас новость -- рекурсивным запросом эффективно резать не удастся.
по крайней мере -- навскидку. (чтобы добегать только до фильтра в каждой итерации надо отдельно сортировать и фильтровать -- идексов то нет)

видимо надо попытаться plpgsql вложенным лупом по 2--м сортированным наборам с выходами по условию выхода из диапазонов. -- должно сработать за 1 проход.

иначе -- это просто многочисленная сортировка с фильтрацией на каждой итерации:
//это должно было быть понятно сразу. проглядел.
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266368
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovits_me,

У вас в запросе функция, которой нет в дампе: bus_idx_rels_parts

если на неё наплевать -- то примерно так :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
DO
$$
DECLARE 
	_t1 record;
	_t2	record;
	ok boolean;
	sum_dist double precision;
	sum_dist_min double precision;
	a_id_start	bigint[];
	a_id_end	bigint[];
	a_sum_dist double precision[];
	a_dist_start double precision[];
	a_dist_end double precision[];
	_result record;
BEGIN
	<<_t1_>>
	FOR _t1 IN
		(select osm_id as id_start, way as start_way, ST_Distance_Spheroid(ST_Transform(way,4326), ST_GeomFromText('POINT(28.2789393 57.8155523)',4326), 'SPHEROID["WGS 84",6378137,298.257223563]') as dist_start
		from (
				select osm_id, way from opengeo.ru_psk_point where public_transport='stop_position' and tags -> 'bus' = 'yes'
			)bus_points  
		ORDER BY dist_start ) 
	LOOP
		<<_t2_>>
		FOR _t2 IN 
			(select osm_id as id_end, way as end_way, ST_Distance_Spheroid(ST_Transform(way,4326), ST_GeomFromText('POINT(28.2951125 57.8141805)',4326), 'SPHEROID["WGS 84",6378137,298.257223563]') as dist_end
			from (
					select osm_id, way from opengeo.ru_psk_point where public_transport='stop_position' and tags -> 'bus' = 'yes'
					AND osm_id<> _t1.id_start -- ?
				)bus_points
				
			ORDER BY dist_end ) 
		LOOP 
			ok:= EXISTS (SELECT 1 FROM opengeo.ru_psk_rels rels
						WHERE
							array[_t1.id_start,_t2.id_end]<@rels.parts 
							and array['route','ref']<@rels.tags );
							
			sum_dist:= CASE WHEN ok THEN _t1.dist_start + _t2.dist_end END;
			sum_dist_min:=LEAST(sum_dist_min,sum_dist);
			IF ok THEN
				a_id_start	:= a_id_start	||	_t1.id_start;
				a_id_end	:=a_id_end		||	_t2.id_end;
				a_sum_dist	:=a_sum_dist	||	sum_dist;

				a_dist_start	:=a_dist_start	|| _t1.dist_start;
				a_dist_end 		:=a_dist_end	|| _t2.dist_end;
			END IF;
			

			IF _t2.dist_end >=sum_dist_min THEN
				exit _t2_;
			END IF;

			IF _t1.dist_start >=sum_dist_min THEN
				exit _t1_;
			END IF;
		END LOOP;
	END LOOP;
	
	SELECT * FROM (
	SELECT	unnest(a_id_start) AS id_start
			,unnest(a_id_end) AS id_end
			,unnest(a_sum_dist) AS sum_dist
			,unnest(a_dist_start) AS dist_start
			,unnest(a_dist_end) AS dist_end
	) foo ORDER BY sum_dist LIMIT 1
	INTO _result;

	raise NOTICE '%' , _result;
END;
$$;

...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266475
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqесли на неё наплевать -- то примерно та:
Чёт не выходит у меня этот цветок :)

Меня напрягает, что нужно сортировать явным образом `ru_psk_point`, без индексов. Если, как было сказано, оно ещё и вырастет, то тут подход неправильный.

Думаю, что в `ru_psk_rels` хранятся маршруты, `ru_psk_rels.parts` -- остановки.
В `ru_psk_point` -- какие-то моменты в рамках маршрута. Может через kNN искать ближайшую остановку из общего списка для каждого момента , а потом уже накладывать эти точки на маршруты? Ну чтобы индексы задействовать...
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266490
its_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorovits_me,

У вас в запросе функция, которой нет в дампе: bus_idx_rels_parts

Я её выше написал отдельно.
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266496
its_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov
Меня напрягает, что нужно сортировать явным образом `ru_psk_point`, без индексов. Если, как было сказано, оно ещё и вырастет, то тут подход неправильный.

Думаю, что в `ru_psk_rels` хранятся маршруты, `ru_psk_rels.parts` -- остановки.
В `ru_psk_point` -- какие-то моменты в рамках маршрута. Может через kNN искать ближайшую остановку из общего списка для каждого момента , а потом уже накладывать эти точки на маршруты? Ну чтобы индексы задействовать...

ru_psk_rels - маршруты(общее - отношения)
ru_psk_rels.parts - объекты отношения(в тч остановки из ru_psk_point.id)
ru_psk_point - остановки(точки)

Про метод задействовать индексы непонял, что за каждый момент?
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266502
its_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq
видимо надо попытаться plpgsql вложенным лупом по 2--м сортированным наборам с выходами по условию выхода из диапазонов. -- должно сработать за 1 проход.

Вы же можете писать как пример скрипты тут и даже не маленькие, как хорошо бы эту строчку увидеть в "скриптовом" виде)). Вы же вкурсе как до меня доходят Ваши советы)).
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266512
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
its_meЯ её выше написал отдельно.
Я не понимаю что там:
- создаётся функция
- потом индекс на несуществующей реляции
- потом создаётся таблица с названием `ru_psk_rels_parts_idx` в которой вы раскрываете список точек в маршруте (если мои предположения верны).

Опишите, что вы делаете формально, будет проще экспериментировать.
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266531
its_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorovits_meЯ её выше написал отдельно.
Я не понимаю что там:
- создаётся функция
- потом индекс на несуществующей реляции
- потом создаётся таблица с названием `ru_psk_rels_parts_idx` в которой вы раскрываете список точек в маршруте (если мои предположения верны).

Опишите, что вы делаете формально, будет проще экспериментировать.

Порядок только у меня перепутан)).

Создаю таблицу для извлечения информации по индексам в массиве(parts) объектов отношения.
Далее индекс для этой таблицы.
Далее функцию которая из этой таблицы возвращает индекс(нужна в запросе для фильтра порядка расположения остановок).

Главная проблема/причина у меня была в извлечении индексов объектов массива - версия постгреса 9.2(нету array_position), intarray не включить(ругается osm2pgsql), есть generate(он используется у меня в следующем запросе и он не самый быстрый тоже) - других я не нашел методов возврата индекса.
...
Рейтинг: 0 / 0
Что можно сделать для сокращения времени обработки запроса?
    #39266558
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
its_me,

что храниться в `ru_psk_point.way` -- точка? ломанная? замкнутый контур?

координаты откуда беруться? и что это -- фиксация каких-то мест?

вы считаете дистанцию от заданных координат и потом отбираете минимальныую сумму. Вы хотите найти `way`-ы, ближайшие к заданным координатам? Расстояние между координатами? Расстояния между `way`-ми? -- уточните!

если `ru_psk_point.way` используется в географических выражениях, почему не использовать тип geography?

зачем хранить точки `ru_psk_rels.parts` в виде массива и мучаться с индексами, может ввести подчинённую таблицу?
...
Рейтинг: 0 / 0
25 сообщений из 69, страница 2 из 3
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Что можно сделать для сокращения времени обработки запроса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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