Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как ускорить выборку из вью? / 3 сообщений из 3, страница 1 из 1
23.09.2017, 11:01
    #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
23.09.2017, 11:20
    #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
23.09.2017, 11:54
    #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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как ускорить выборку из вью? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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