Changes between Initial Version and Version 1 of DriverLunchTimersView


Ignore:
Timestamp:
05/10/26 14:36:41 (2 weeks ago)
Author:
185022
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DriverLunchTimersView

    v1 v1  
     1= Преглед: v_driver_lunch_timers =
     2
     3||= Датотека ||= `views/07_driver_lunch_timers_view.sql` ||
     4||= Шема ||= `kbnteam` ||
     5||= Категорија ||= Оперативна поддршка ||
     6||= Поврзани индекси ||= `indexes/v_driver_lunch_timers_index.sql` ||
     7
     8== Опис ==
     9Ги наведува распоредите за ручек за возачи, договори и компании. Поврзува `lunch_time` со договорот, компанијата, ресторанот и сите возачи на тој ресторан. Особено погоден за распоредување базирано на денови од неделата и потсетници за возачи.
     10
     11'''Важно:''' JOIN-от `driver drv ON drv.rest_id = r.rest_id` враќа по еден ред за секој возач на ресторанот, не само за одреден возач. Ако ресторанот има повеќе возачи, ќе добиете повеќе редови по распоред.
     12
     13== Зависности ==
     14||= Табела ||= Тип на употреба ||
     15|| `kbnteam.lunch_time` || Главна табела ||
     16|| `kbnteam.contract` || JOIN — договорот ||
     17|| `kbnteam.company` || JOIN — компанија ||
     18|| `kbnteam.restaurant` || JOIN — ресторан ||
     19|| `kbnteam.driver` || JOIN — сите возачи на ресторанот ||
     20|| `kbnteam.api_user` || JOIN — детали за возачот ||
     21
     22== Излезни колони ==
     23||= Колона ||= Извор ||= Опис ||
     24|| `lunch_time_id` || `lunch_time` || Примарен клуч ||
     25|| `lunch_weekday` || `lunch_time` || Ден од неделата ||
     26|| `lunch_start` || `lunch_time` || Почеток на ручек ||
     27|| `lunch_end` || `lunch_time` || Крај на ручек ||
     28|| `lunch_preorder_offset` || `lunch_time` || Офсет за претходна нарачка (минути) ||
     29|| `comp_order_id` || `lunch_time` || Поврзана компаниска нарачка (NULL ако нема) ||
     30|| `contract_id` || `contract` || ID на договорот ||
     31|| `company_id` || `company` || ID на компанијата ||
     32|| `company_name` || `company` || Назив на компанијата ||
     33|| `rest_id` || `restaurant` || ID на ресторанот ||
     34|| `rest_name` || `restaurant` || Назив на ресторанот ||
     35|| `driver_user_id` || `driver` || ID на возачот ||
     36|| `driver_first_name` || `api_user` || Ime на возачот ||
     37|| `driver_last_name` || `api_user` || Презиме на возачот ||
     38|| `driver_phone` || `api_user` || Телефон на возачот ||
     39
     40== SQL Дефиниција ==
     41{{{
     42#!sql
     43CREATE OR REPLACE VIEW kbnteam.v_driver_lunch_timers AS
     44SELECT
     45    lt.lunch_time_id,
     46    lt.lunch_weekday,
     47    lt.lunch_start,
     48    lt.lunch_end,
     49    lt.lunch_preorder_offset,
     50    lt.comp_order_id,
     51    ct.contract_id,
     52    cmp.company_id,
     53    cmp.company_name,
     54    r.rest_id,
     55    r.rest_name,
     56    drv.user_id AS driver_user_id,
     57    au.user_first_name AS driver_first_name,
     58    au.user_last_name AS driver_last_name,
     59    au.user_phone_no AS driver_phone
     60FROM kbnteam.lunch_time lt
     61JOIN kbnteam.contract ct ON ct.contract_id = lt.contract_id
     62JOIN kbnteam.company cmp ON cmp.company_id = ct.company_id
     63JOIN kbnteam.restaurant r ON r.rest_id = ct.rest_id
     64JOIN kbnteam.driver drv ON drv.rest_id = r.rest_id
     65JOIN kbnteam.api_user au ON au.user_id = drv.user_id;
     66}}}
     67
     68== Тестирање на перформанси ==
     69
     70=== Препорачано тест прашање ===
     71{{{
     72#!sql
     73SET search_path TO kbnteam;
     74SET statement_timeout = '60s';
     75
     76-- Тест 1: по ден од неделата (тестира idx на lunch_time)
     77EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
     78SELECT * FROM kbnteam.v_driver_lunch_timers
     79WHERE lunch_weekday = 'Monday';
     80
     81-- Тест 2: по договор
     82EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
     83SELECT * FROM kbnteam.v_driver_lunch_timers
     84WHERE contract_id = 1;
     85
     86-- Тест 3: по ресторан
     87EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
     88SELECT * FROM kbnteam.v_driver_lunch_timers
     89WHERE rest_id = 1;
     90}}}
     91
     92=== Резултати пред индексирање ===
     93||= Метрика ||= Тест 1 (weekday) ||= Тест 2 (contract) ||= Тест 3 (rest_id) ||
     94|| Planning Time || ___ ms || ___ ms || ___ ms ||
     95|| Execution Time || ___ ms || ___ ms || ___ ms ||
     96|| Rows Returned || ___ || ___ || ___ ||
     97|| lunch_time scan || ___ || ___ || ___ ||
     98|| driver scan || ___ || ___ || ___ ||
     99|| contract scan || ___ || ___ || ___ ||
     100
     101{{{
     102-- Излезот од EXPLAIN ANALYZE овде (пред индексирање)
     103}}}
     104
     105=== Применети индекси ===
     106{{{
     107#!sql
     108-- indexes/v_driver_lunch_timers_index.sql
     109CREATE INDEX IF NOT EXISTS idx_lunch_time_weekday_contract_id
     110ON kbnteam.lunch_time (lunch_weekday, contract_id);
     111
     112CREATE INDEX IF NOT EXISTS idx_driver_rest_id
     113ON kbnteam.driver (rest_id);
     114
     115CREATE INDEX IF NOT EXISTS idx_contract_rest_id_company_id
     116ON kbnteam.contract (rest_id, company_id);
     117}}}
     118
     119=== Резултати по индексирање ===
     120||= Метрика ||= Тест 1 (weekday) ||= Тест 2 (contract) ||= Тест 3 (rest_id) ||
     121|| Planning Time || ___ ms || ___ ms || ___ ms ||
     122|| Execution Time || ___ ms || ___ ms || ___ ms ||
     123|| Rows Returned || ___ || ___ || ___ ||
     124|| lunch_time scan || ___ || ___ || ___ ||
     125|| driver scan || ___ || ___ || ___ ||
     126|| contract scan || ___ || ___ || ___ ||
     127
     128{{{
     129-- Излезот од EXPLAIN ANALYZE овде (по индексирање)
     130}}}
     131
     132=== Анализа на подобрување ===
     133||= Индекс ||= Помага на ||= Очекувана промена ||
     134|| `idx_lunch_time_weekday_contract_id` || Тест 1 — филтрирање по ден || Seq Scan → Index Scan на `lunch_time` ||
     135|| `idx_driver_rest_id` || JOIN `driver ON drv.rest_id = r.rest_id` || Seq Scan → Index Scan на `driver` ||
     136|| `idx_contract_rest_id_company_id` || JOIN `contract` и Тест 3 || Seq Scan → Index Scan на `contract` ||
     137
     138||= Метрика ||= Пред ||= По ||= Δ Подобрување ||
     139|| Execution Time (Тест 1) || ___ ms || ___ ms || ___ % ||
     140|| Execution Time (Тест 2) || ___ ms || ___ ms || ___ % ||
     141|| Execution Time (Тест 3) || ___ ms || ___ ms || ___ % ||