| Version 1 (modified by , 2 weeks ago) ( diff ) |
|---|
Преглед: v_company_users
| Датотека | views/09_company_users_view.sql
|
|---|---|
| Шема | kbnteam
|
| Категорија | Оперативна поддршка |
| Поврзани индекси | Нема наменска датотека — ги користи споделените индекси |
Опис
Ги комбинира купувачите, возачите и api_admin корисниците во еден преглед ориентиран на компанија. Користи три UNION гранки — по една за секоја улога. Корисниците од тип driver и api_admin се прикажуваат само ако постои активен договор помеѓу компанијата и нивниот ресторан.
Зависности
| Табела | Улога | UNION гранка |
|---|---|---|
kbnteam.customer | Купувач | 1 (customer) |
kbnteam.company | Компанија | Сите |
kbnteam.api_user | Детали за корисник | Сите |
kbnteam.contract | Договор за компанија-ресторан | 2 (driver), 3 (admin) |
kbnteam.restaurant | Ресторан | 2 (driver), 3 (admin) |
kbnteam.driver | Возач | 2 (driver) |
kbnteam.api_admin | Администратор | 3 (admin) |
SQL Дефиниција
CREATE OR REPLACE VIEW kbnteam.v_company_users AS
SELECT
cu.company_id,
cmp.company_name,
'customer'::text AS related_role,
au.user_id,
au.user_first_name,
au.user_last_name,
au.user_email,
au.user_phone_no,
NULL::integer AS rest_id,
NULL::varchar(255) AS rest_name
FROM kbnteam.customer cu
JOIN kbnteam.company cmp ON cmp.company_id = cu.company_id
JOIN kbnteam.api_user au ON au.user_id = cu.user_id
UNION
SELECT DISTINCT
ct.company_id,
cmp.company_name,
'driver'::text AS related_role,
au.user_id,
au.user_first_name,
au.user_last_name,
au.user_email,
au.user_phone_no,
r.rest_id,
r.rest_name
FROM kbnteam.contract ct
JOIN kbnteam.company cmp ON cmp.company_id = ct.company_id
JOIN kbnteam.restaurant r ON r.rest_id = ct.rest_id
JOIN kbnteam.driver drv ON drv.rest_id = r.rest_id
JOIN kbnteam.api_user au ON au.user_id = drv.user_id
UNION
SELECT DISTINCT
ct.company_id,
cmp.company_name,
'api_admin'::text AS related_role,
au.user_id,
au.user_first_name,
au.user_last_name,
au.user_email,
au.user_phone_no,
r.rest_id,
r.rest_name
FROM kbnteam.contract ct
JOIN kbnteam.company cmp ON cmp.company_id = ct.company_id
JOIN kbnteam.restaurant r ON r.rest_id = ct.rest_id
JOIN kbnteam.api_admin aa ON aa.rest_id = r.rest_id
JOIN kbnteam.api_user au ON au.user_id = aa.user_id;
Тестирање на перформанси
Препорачано тест прашање
SET search_path TO kbnteam; SET statement_timeout = '60s'; -- Тест 1: по компанија EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT * FROM kbnteam.v_company_users WHERE company_id = 1; -- Тест 2: по улога EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT * FROM kbnteam.v_company_users WHERE related_role = 'driver';
Резултати
Овој преглед нема наменска датотека за индекси. Перформансите зависат од договорните и корисничките индекси создадени за другите прегледи.
| Метрика | Тест 1 (company_id) | Тест 2 (role) |
|---|---|---|
| Planning Time | _ ms | _ ms |
| Execution Time | _ ms | _ ms |
| Rows Returned | _ | _ |
| Scan Type (customer) | _ | _ |
| Scan Type (contract) | _ | _ |
-- Излезот од EXPLAIN ANALYZE овде
Потенцијални подобрувања
Доколку овој преглед е бавен, разгледајте:
- Индекс на
customer(company_id)— за Гранка 1 - Индекс на
contract(company_id)(веќе создаден соv_company_billing_overview_index.sql) — за Гранки 2 и 3 - Индекс на
driver(rest_id)(веќе создаден соv_driver_lunch_timers_index.sql) — за Гранка 2 - Индекс на
api_admin(rest_id)— за Гранка 3
Note:
See TracWiki
for help on using the wiki.
