wiki:DriverLunchTimersView

Преглед: v_driver_lunch_timers

Датотека views/07_driver_lunch_timers_view.sql
Шема kbnteam
Категорија Оперативна поддршка
Поврзани индекси indexes/v_driver_lunch_timers_index.sql

Опис

Ги наведува распоредите за ручек за возачи, договори и компании. Поврзува lunch_time со договорот, компанијата, ресторанот и сите возачи на тој ресторан. Особено погоден за распоредување базирано на денови од неделата и потсетници за возачи.

Важно: JOIN-от driver drv ON drv.rest_id = r.rest_id враќа по еден ред за секој возач на ресторанот, не само за одреден возач. Ако ресторанот има повеќе возачи, ќе добиете повеќе редови по распоред.

Зависности

Табела Тип на употреба
kbnteam.lunch_time Главна табела
kbnteam.contract JOIN — договорот
kbnteam.company JOIN — компанија
kbnteam.restaurant JOIN — ресторан
kbnteam.driver JOIN — сите возачи на ресторанот
kbnteam.api_user JOIN — детали за возачот

Излезни колони

Колона Извор Опис
lunch_time_id lunch_time Примарен клуч
lunch_weekday lunch_time Ден од неделата
lunch_start lunch_time Почеток на ручек
lunch_end lunch_time Крај на ручек
lunch_preorder_offset lunch_time Офсет за претходна нарачка (минути)
comp_order_id lunch_time Поврзана компаниска нарачка (NULL ако нема)
contract_id contract ID на договорот
company_id company ID на компанијата
company_name company Назив на компанијата
rest_id restaurant ID на ресторанот
rest_name restaurant Назив на ресторанот
driver_user_id driver ID на возачот
driver_first_name api_user Ime на возачот
driver_last_name api_user Презиме на возачот
driver_phone api_user Телефон на возачот

SQL Дефиниција

CREATE OR REPLACE VIEW kbnteam.v_driver_lunch_timers AS
SELECT
    lt.lunch_time_id,
    lt.lunch_weekday,
    lt.lunch_start,
    lt.lunch_end,
    lt.lunch_preorder_offset,
    lt.comp_order_id,
    ct.contract_id,
    cmp.company_id,
    cmp.company_name,
    r.rest_id,
    r.rest_name,
    drv.user_id AS driver_user_id,
    au.user_first_name AS driver_first_name,
    au.user_last_name AS driver_last_name,
    au.user_phone_no AS driver_phone
FROM kbnteam.lunch_time lt
JOIN kbnteam.contract ct ON ct.contract_id = lt.contract_id
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;

Тестирање на перформанси

Препорачано тест прашање

SET search_path TO kbnteam;
SET statement_timeout = '60s';

-- Тест 1: по ден од неделата (тестира idx на lunch_time)
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM kbnteam.v_driver_lunch_timers
WHERE lunch_weekday = 'Monday';

-- Тест 2: по договор
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM kbnteam.v_driver_lunch_timers
WHERE contract_id = 1;

-- Тест 3: по ресторан
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM kbnteam.v_driver_lunch_timers
WHERE rest_id = 1;

Резултати пред индексирање

Метрика Тест 1 (weekday) Тест 2 (contract) Тест 3 (rest_id)
Planning Time _ ms _ ms _ ms
Execution Time _ ms _ ms _ ms
Rows Returned _ _ _
lunch_time scan _ _ _
driver scan _ _ _
contract scan _ _ _
-- Излезот од EXPLAIN ANALYZE овде (пред индексирање)

Применети индекси

-- indexes/v_driver_lunch_timers_index.sql
CREATE INDEX IF NOT EXISTS idx_lunch_time_weekday_contract_id
ON kbnteam.lunch_time (lunch_weekday, contract_id);

CREATE INDEX IF NOT EXISTS idx_driver_rest_id
ON kbnteam.driver (rest_id);

CREATE INDEX IF NOT EXISTS idx_contract_rest_id_company_id
ON kbnteam.contract (rest_id, company_id);

Резултати по индексирање

Метрика Тест 1 (weekday) Тест 2 (contract) Тест 3 (rest_id)
Planning Time _ ms _ ms _ ms
Execution Time _ ms _ ms _ ms
Rows Returned _ _ _
lunch_time scan _ _ _
driver scan _ _ _
contract scan _ _ _
-- Излезот од EXPLAIN ANALYZE овде (по индексирање)

Анализа на подобрување

Индекс Помага на Очекувана промена
idx_lunch_time_weekday_contract_id Тест 1 — филтрирање по ден Seq Scan → Index Scan на lunch_time
idx_driver_rest_id JOIN driver ON drv.rest_id = r.rest_id Seq Scan → Index Scan на driver
idx_contract_rest_id_company_id JOIN contract и Тест 3 Seq Scan → Index Scan на contract
Метрика Пред По Δ Подобрување
Execution Time (Тест 1) _ ms _ ms _ %
Execution Time (Тест 2) _ ms _ ms _ %
Execution Time (Тест 3) _ ms _ ms _ %
Last modified 2 weeks ago Last modified on 05/10/26 14:36:41
Note: See TracWiki for help on using the wiki.