powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как ускорить выборку из вью?
3 сообщений из 3, страница 1 из 1
Как ускорить выборку из вью?
    #39525245
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой вью и функция, выборка из этого вью работает долго, и это из-за функции, поскольку, когда заглушил ее (см. ниже)
все летает.Как ускорить?
Раскрутить функцию в запросе?

Код: plsql
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.
CREATE VIEW public.v_deals_and_customer
AS
SELECT t.company AS customer,
    t.forename,
    t.surname,
    s.company AS supplier,
    u.user_name,
    s.sales_contact,
    d.supplier_id,
    d.customer_id,
    d.deal_no,
    d.capital_cost,
    d.equipment_breakdown,
    d.payment_term,
    d.payment_profile_1,
    d.payment_profile_2,
    d.billing,
    d.notes,
    d.state,
    d.bylender,
    d.ref_number,
    d.upgrade,
    d.special,
    d.rental,
    d.reason,
    d.term,
    d.state_date,
    d.docs_received,
    d.docs_sent,
    d.gross_profit,
    d.deferal_payment,
    d.suppliers_comission,
    d.title_sent_date,
    d.title_paid_date,
    d.paid_date,
    d.paid,
    d.user_id_paid,
    d.eq_code,
    t.address AS customer_address,
    s.address AS supplier_address,
    --now() AS estimate_completion_date  --<----- заглушка
   getestimationdate(d.deal_no) AS estimate_completion_date
FROM deals d
     JOIN customers t ON d.customer_id = t.id
     JOIN suppliers s ON d.supplier_id = s.id
     JOIN users u ON s.agent_id = u.user_id;
     
---- 
     
CREATE OR REPLACE FUNCTION public.getestimationdate (
  _dealno integer
)
RETURNS TIMESTAMP WITHOUT TIME ZONE AS
$body$
	select    a.msg_date + payment_term * INTERVAL '1 month'
    --DATEADD(MONTH,payment_term,a.msg_date)
	from deals d
    inner join  crm_activity a
    on d.deal_no=a.msg_dealno
	and a.msg_text ilike '%Paid%'
	and d.deal_no=_dealno
    and d.state_date is not null
    limit 1;
$body$
LANGUAGE 'sql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100; 
...
Рейтинг: 0 / 0
Как ускорить выборку из вью?
    #39525250
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Сделать explain analyze для запроса внутри функции и посмотреть на него внимательно. Может что то прояснится.
Или индекс где то забыли или еще что.
Первично 3 версии могу высказать:
1)тупо забытый индекс где то на d.deal_no или на a.msg_dealno
2)исключительно дурная по своей вообще сути идея делать бизеслогику логику на ilike a.msg_text ilike '%Paid%'
3)LIMIT 1 без ORDER BY

а точнее надо на explain analyze смотреть.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Как ускорить выборку из вью?
    #39525261
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukРолг Хупин,

Сделать explain analyze для запроса внутри функции и посмотреть на него внимательно. Может что то прояснится.
Или индекс где то забыли или еще что.
Первично 3 версии могу высказать:
1)тупо забытый индекс где то на d.deal_no или на a.msg_dealno
2)исключительно дурная по своей вообще сути идея делать бизеслогику логику на ilike a.msg_text ilike '%Paid%'
3)LIMIT 1 без ORDER BY

а точнее надо на explain analyze смотреть.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru


Не то слово! но не мы такие - время такое (ц)

d.deal_no ПК, а на a.msg_dealno добавил индекс, полегчало
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как ускорить выборку из вью?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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