powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / оптимизация запроса
7 сообщений из 57, страница 3 из 3
оптимизация запроса
    #38933251
pcadviser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwqpcadviserпропущено...


индексы есть и по the_geom, id, gid, source, target

с применением NOT EXISTS, тоже пробывал
результат - хуже

результат - в теме, чуть выше
гне надо пробЫвать, пробудете так всё на свете

надо сделать что просят, если лень читать
-- я вытащил наружу передаваемую в C динамику -- и прошу план по ней, а не по внешнему запросу

исходный вариант

Код: sql
1.
2.
3.
4.
5.
6.
explain (ANALYZE, costs, buffers) SELECT * FROM (SELECT * FROM road_addedges UNION ALL 
SELECT * FROM road.edges) AS graph 
WHERE id NOT IN (SELECT gid FROM road_deledges) 
AND source NOT IN (SELECT gid FROM road_delnodes) 
AND target NOT IN (SELECT gid FROM road_delnodes) 
AND NOT st_intersects(the_geom, geomfromewkt('SRID=4326;POLYGON((53 52,51 56,55 56,53 52))')) 



Result (cost=120.00..3133126.09 rows=1098593 width=494) (actual time=0.032..6952.084 rows=8746687 loops=1)
Buffers: shared hit=23595 read=728140, local hit=3
Append (cost=120.00..3133126.09 rows=1098593 width=494) (actual time=0.032..5770.488 rows=8746687 loops=1)
Buffers: shared hit=23595 read=728140, local hit=3
-> Seq Scan on road_addedges (cost=120.00..248.80 rows=55 width=152) (actual time=0.032..0.037 rows=6 loops=1)
Filter: ((NOT (hashed SubPlan 1)) AND (NOT (hashed SubPlan 2)) AND (NOT (hashed SubPlan 3)) AND ((NOT (the_geom && '0103000020E610000001000000040000000000000000804A400000000000004A4000000000008049400000000000004C400000000000804B400000000000004C400000000000804A400000000000004A40'::geometry))
OR (NOT _st_intersects(the_geom, '0103000020E610000001000000040000000000000000804A400000000000004A4000000000008049400000000000004C400000000000804B400000000000004C400000000000804A400000000000004A40'::geometry))))
Buffers: local hit=2
SubPlan 1
-> Seq Scan on road_deledges (cost=0.00..34.00 rows=2400 width=4) (actual time=0.001..0.001 rows=2 loops=2)
Buffers: local hit=2
SubPlan 2
-> Seq Scan on road_delnodes (cost=0.00..34.00 rows=2400 width=4) (actual time=0.001..0.001 rows=0 loops=2)
SubPlan 3
-> Seq Scan on road_delnodes (cost=0.00..34.00 rows=2400 width=4) (actual time=0.001..0.001 rows=0 loops=2)
-> Seq Scan on edges (cost=120.00..3132877.29 rows=1098538 width=494) (actual time=0.030..5074.961 rows=8746681 loops=1)
Filter: ((NOT (hashed SubPlan 1)) AND (NOT (hashed SubPlan 2)) AND (NOT (hashed SubPlan 3)) AND ((NOT (the_geom && '0103000020E610000001000000040000000000000000804A400000000000004A4000000000008049400000000000004C400000000000804B400000000000004C400000000000804A400000000000004A40'::geometry))
OR (NOT _st_intersects(the_geom, '0103000020E610000001000000040000000000000000804A400000000000004A4000000000008049400000000000004C400000000000804B400000000000004C400000000000804A400000000000004A40'::geometry))))
Buffers: shared hit=23595 read=728140, local hit=1
SubPlan 1
-> Seq Scan on road_deledges (cost=0.00..34.00 rows=2400 width=4) (actual time=0.001..0.001 rows=2 loops=2)
Buffers: local hit=2
SubPlan 2
-> Seq Scan on road_delnodes (cost=0.00..34.00 rows=2400 width=4) (actual time=0.001..0.001 rows=0 loops=2)
SubPlan 3
-> Seq Scan on road_delnodes (cost=0.00..34.00 rows=2400 width=4) (actual time=0.001..0.001 rows=0 loops=2)

Total runtime: 7291.332 ms
...
Рейтинг: 0 / 0
оптимизация запроса
    #38933257
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pcadviser,

1)очень полезно сделать analyze для road_deledges и для road_delnodes

2)а какую собственно производительность вы ожидаете от запроса который возвращает 9M строк и дальше еще что то с ними в сишном коде делает? Тем более что судя по цифрам именно сишная хранимка (и даже не запрос в ней) все время и тратят.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
оптимизация запроса
    #38933259
pcadviser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq2. как велик перечень ключей (source,target), по условиям


Код: sql
1.
2.
AND NOT EXISTS ( SELECT 1 FROM road_delnodes AS rdn WHERE rdn.gid = graph.source) 
AND NOT EXISTS ( SELECT 1 FROM road_delnodes AS rdn WHERE rdn.gid = graph.target)



--исчислим ли этот набор (или его срезы) снаружи (т.е. охвачено ли всё fk-ями) ?
-- если исчислим, и ожидаемо мал -- нельзя ли инвертировать NOT IN () в "=ANY(ARRAY(SELECT f_keys FROM blahblah EXCEPT ... FROM road_delnodes.))" ?
-- если можно -- то нет ли возможности составной btree_gist индекс поюзать ?

набор исчислим - до 1000 записей, примерно

не смог разобрать -
инвертировать NOT IN () в "=ANY(ARRAY( SELECT f_keys FROM blahblah EXCEPT ... FROM road_delnodes .))" ?
...
Рейтинг: 0 / 0
оптимизация запроса
    #38933261
pcadviser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Bogukдля road_deledges и для road_delnodes

1)
road_deledges и road_delnodes - временные таблицы
что за analyze к ним сделать?

2)
по производительности - хотелось бы по максимуму.

Спасибо за помощь!!!
...
Рейтинг: 0 / 0
оптимизация запроса
    #38933346
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pcadviser,

Код: sql
1.
SELECT COUNT(1) FROM edges 



PS скорее всего от скана вы не избавитесь. Т.ч. все про "не разобрал" -- не важно.
А обегание возврата внутри С не в ваших руках
...
Рейтинг: 0 / 0
оптимизация запроса
    #39125466
Pan_Alaverdy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! с упрощением такого запроса кто нибудь может помочь?

SELECT
case
when orders.operator_comment LIKE '%#dostavleno%' THEN 'ДОСТАВЛЕН ТО'
when warehouse1.name = warehouse.name THEN 'ЛЕЖИТ НА ТТ'
ELSE 'НЕ ДОСТАВЛЕН'
end,
case when orders.delivery_method=1 or orders.delivery_method=4 THEN ''
when orders.delivery_method=2 THEN warehouse.name
ELSE 'Кто тут у нас?' end,
case
when orders.operator_comment LIKE '%#grandgotov%' and orders.operator_comment LIKE '%#megagotov%' THEN 'ОБА_ГОТОВЫ_АА'
when orders.operator_comment LIKE '%#astmelomangotov%' and orders.operator_comment LIKE '%#astmarwingotov%' THEN 'ОБА_ГОТОВЫ_АС'
when orders.operator_comment LIKE '%#damn%' THEN 'НЕТ_ТОВАРА'
when orders.operator_comment LIKE '%#grandgotov%' THEN 'ГРАНД_СОБРАЛ'
when orders.operator_comment LIKE '%#megagotov%' THEN 'МЕГА_СОБРАЛ'
when orders.operator_comment LIKE '%#astmelomangotov%' THEN 'АСТ_МЕГА_СОБРАЛ'
when orders.operator_comment LIKE '%##astmarwingotov%' THEN 'АСТ_МАРВИН_СОБРАЛ'
ELSE 'НЕГОТОВ'
end,
extract(year from orders.order_date) as year,
extract(month from orders.order_date) as month,
extract(hour from orders.order_date) as hour,
extract(week from orders.order_date) as week,
date(orders.order_date),
orders.order_id,
orders.customer_surname,
orders.points_spent,
orders.bonus_points,
orders.customer_name,
orders.customer_secondname,
orders.customer_phone,
orders.customer_mobile,
orders.customer_email,
orders.delivery_region,
orders.delivery_city,
orders.delivery_microdistrict,
orders.delivery_street,
orders.delivery_house,
orders.delivery_apartment,
orders.delivery_zip_code,
orders.delivery_comment,
orders.retail_outlet_name,
orders.retail_outlet_address,
orders.retail_outlet_phone,
orders.retail_outlet_email,
orders.retail_outlet_warehouse_token,
(orders.delivery_cost+orders.order_cost) as itog,
orders.ic,
orders.delivery_method_description,
orders.delivery_date,
orders.delivery_time_of_day,
orders.delivery_cost,
orders.order_cost,
orders.order_date,
shipment.warehouse_token,
item.name_eshop,
item.id_ax,
item.name_ax,
item.category,
item.price,
item.quantity,
delivery_methods.caption,
order_conditions.caption,
order_states.caption,
orders.responsible,
warehouse1.name,
warehouse.name,
payment_methods.caption,
action_journal_goods_item_shipment_state.action_comment
FROM
imm.orders
INNER JOIN imm.item ON (orders.order_id = item.order_id)
INNER JOIN dictionaries.delivery_methods ON (orders.delivery_method = delivery_methods.id)
INNER JOIN dictionaries.order_conditions ON (orders.order_condition = order_conditions.id)
INNER JOIN dictionaries.order_states ON (orders.order_state = order_states.id)
INNER JOIN dictionaries.payment_methods ON(orders.payment_method = payment_methods.id),
imm.shipment
LEFT JOIN imm.action_journal_goods_item_shipment_state j ON j.id=(select max(id) from imm.action_journal_goods_item_shipment_state where reference_id = shipment.id),
imm.warehouse warehouse1,
imm.warehouse,
imm.action_journal_goods_item_shipment_state
WHERE
item.id = shipment.order_goods_item_id AND
warehouse1.token = shipment.warehouse_token AND
warehouse.token = orders.retail_outlet_warehouse_token and
orders.order_date > '2015-11-16' and orders.delivery_comment like '%expressdelivery%'
...
Рейтинг: 0 / 0
оптимизация запроса
    #39126546
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pan_Alaverdy,
0. шагом марш новую тему на форуме:
http://www.sql.ru/forum/actualpost.aspx?bid=7
создавать. Хватит наверх мусор 100летней давности поднимать.
Тебе ответят все те же люди.
1. explain (запрос)? Причем отформатированный с сохранением пробелов (юзай тег src)
2. таблицы и индексы по ним?
...
Рейтинг: 0 / 0
7 сообщений из 57, страница 3 из 3
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / оптимизация запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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