Преглед: v_driver_deliveries
| Својство | Вредност |
|---|---|
| Шема | kbnteam
|
| Категорија | Нарачки и достави |
| Индексна поддршка | v_driver_deliveries_index |
Опис
Ги прикажува доставите, доставувачите, рестораните, компаниите и поврзаните нарачки.
Го користи прегледот на нарачки за деталите за клиентот и нарачаните производи. Се прикажуваат и доставите без назначен доставувач или поврзани нарачки.
Еден ред за секоја клиентска нарачка во доставата. Достава без клиентски нарачки останува прикажана со NULL податоци за нарачката.
Податоците за нарачките се добиваат преку v_orders_full. Овој преглед е зависност на прегледот за достави.
Зависности
| Табела / преглед | Употреба |
|---|---|
kbnteam.delivery | Достави, датуми, забелешки и назначени доставувачи. |
kbnteam.delivery_status | Називи на статусите на доставите. |
kbnteam.driver | Доставувачи и нивните ресторани. |
kbnteam.api_user | Лични и контактни податоци за корисниците. |
kbnteam.restaurant | Податоци за рестораните. |
kbnteam.company_order | Поврзување на компаниските нарачки со компанијата и доставата. |
kbnteam.company | Податоци за компаниите. |
| v_orders_full | Преглед со детали за клиентските нарачки и листи со производи. |
Излезни колони
| Колона | Извор / пресметка | Опис |
|---|---|---|
delivery_id | delivery.delivery_id | Идентификатор на доставата. |
delivery_date | delivery.delivery_date | Датум на доставата. |
delivery_notes | delivery.delivery_notes | Забелешки за доставата. |
d_status_name | delivery_status.d_status_name | Статус на доставата. |
driver_user_id | driver.user_id | Идентификатор на доставувачот. |
driver_first_name | api_user.user_first_name | Име на доставувачот. |
driver_last_name | api_user.user_last_name | Презиме на доставувачот. |
driver_phone | api_user.user_phone_no | Телефон на доставувачот. |
rest_id | restaurant.rest_id | Идентификатор на ресторанот. |
rest_name | restaurant.rest_name | Назив на ресторанот. |
comp_order_id | company_order.comp_order_id | Идентификатор на компаниската нарачка. |
company_id | company.company_id | Идентификатор на компанијата. |
company_name | company.company_name | Назив на компанијата. |
order_id | v_orders_full.order_id | Идентификатор на клиентската нарачка. |
order_datetime | v_orders_full.order_datetime | Датум и време на нарачката. |
order_total | v_orders_full.order_total | Вкупен износ на нарачката. |
customer_user_id | v_orders_full.customer_user_id | Идентификатор на клиентот. |
customer_first_name | v_orders_full.customer_first_name | Име на клиентот. |
customer_last_name | v_orders_full.customer_last_name | Презиме на клиентот. |
customer_email | v_orders_full.customer_email | Е-пошта на клиентот. |
meals | COALESCE(v_orders_full.meals, '') | Подредена листа со називи на нарачаните јадења. |
drinks | COALESCE(v_orders_full.drinks, '') | Подредена листа со називи на нарачаните пијалоци. |
SQL дефиниција
CREATE OR REPLACE VIEW kbnteam.v_driver_deliveries AS
SELECT
d.delivery_id,
d.delivery_date,
d.delivery_notes,
ds.d_status_name,
drv.user_id AS driver_user_id,
du.user_first_name AS driver_first_name,
du.user_last_name AS driver_last_name,
du.user_phone_no AS driver_phone,
r.rest_id,
r.rest_name,
co.comp_order_id,
cmp.company_id,
cmp.company_name,
o.order_id,
o.order_datetime,
o.order_total,
o.customer_user_id,
o.customer_first_name,
o.customer_last_name,
o.customer_email,
COALESCE(o.meals, '') AS meals,
COALESCE(o.drinks, '') AS drinks
FROM kbnteam.delivery d
JOIN kbnteam.delivery_status ds ON ds.d_status_id = d.d_status_id
LEFT JOIN kbnteam.driver drv ON drv.user_id = d.driver_user_id
LEFT JOIN kbnteam.api_user du ON du.user_id = drv.user_id
LEFT JOIN kbnteam.restaurant r ON r.rest_id = drv.rest_id
LEFT JOIN kbnteam.company_order co ON co.delivery_id = d.delivery_id
LEFT JOIN kbnteam.company cmp ON cmp.company_id = co.company_id
LEFT JOIN kbnteam.v_orders_full o ON o.comp_order_id = co.comp_order_id;
Индексна поддршка
Дополнителното индексирање е поставено врз изворните табели на погледот.
| Индекс | Табела и колони | Намена |
|---|---|---|
idx_delivery_driver_user_id_delivery_date | delivery(driver_user_id, delivery_date) | Пребарување достави по доставувач и датум. |
idx_company_order_company_id | company_order(company_id) | Пронаоѓање компаниски нарачки по компанија. |
idx_customer_order_comp_order_id | customer_order(comp_order_id) | Пронаоѓање клиентски нарачки по компаниска нарачка. |
idx_order_meal_order_id_meal_id | order_meal(order_id, meal_id) | Поврзување на нарачката со јадењата и групирање по order_id. |
idx_order_drink_order_id_drink_id | order_drink(order_id, drink_id) | Поврзување на нарачката со пијалоците и групирање по order_id. |
Дефинициите се наведени во v_driver_deliveries_index. За поврзаните табели се користат и индексите опишани во v_orders_full_index.
Тестирање на перформанси
SELECT
Мерењата се евидентирани во DBeaver. Времињата се во милисекунди (ms).
SELECT * FROM kbnteam.v_driver_deliveries WHERE driver_user_id = 450;
| Мерење | Клиентско време (ms) | Приказ во DBeaver |
|---|---|---|
| Пред индексирање | околу 70000 | Преземени 200 редови |
| По индексирање | 48236 | Вкупно време за 2 наредби |
Во статистиката по индексирањето се прикажани следните времиња:
| Метрика | Време (ms) |
|---|---|
| Execute | 48208 |
| Fetch | 28 |
| Вкупно | 48236 |
Првото мерење прикажува околу 1 минута и 10 секунди за 200 редови, а второто статистика за две наредби. Споредбата е ориентациска поради различниот начин на мерење.
INSERT и UPDATE
Тестирани се по еден INSERT и еден UPDATE врз kbnteam.delivery, главната табела на погледот. Се тестира додавање достава и промена на забелешката.
| Операција | Execute (ms) | Fetch (ms) | Вратени редови |
|---|---|---|---|
| INSERT | 13 | 16 | 1 |
| UPDATE | 13 | 13 | 1 |
Execute е времето на извршување прикажано во DBeaver. Fetch вредностите се преземени од дополнетата евиденција на тестирањето. Ова се клиентски времиња, изразени во милисекунди.
Двете операции се успешни и враќаат по еден ред преку RETURNING. По мерењето промените се вратени со ROLLBACK.
INSERT и UPDATE се извршуваат со прифатлива брзина. Овие мерења ја опишуваат тестираната состојба на базата и не се споредба пред и по индексирање.
