wiki:DriverDeliveriesView

Version 2 (modified by 223235, 13 days ago) ( diff )

--

Преглед: v_driver_deliveries

Својство Вредност
Шема kbnteam
Категорија Нарачки и достави
Поврзани индекси Индекси за нарачки и достави

Опис

Ги прикажува доставите, доставувачите, рестораните, компаниите и поврзаните нарачки.

Го користи прегледот на нарачки за деталите за клиентот и нарачаните производи. Се прикажуваат и доставите без назначен доставувач или поврзани нарачки.

Еден ред за секоја клиентска нарачка во доставата. Достава без клиентски нарачки останува прикажана со 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;

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

Примерите користат илустративни идентификатори и датуми. За споредливи мерења се избираат вредности што постојат во базата и се задржуваат истите податоци, филтри, услови за кеширање и број на повторувања. Статистиките за табелите треба да бидат ажурирани во двете состојби.

Тест прашалници

BEGIN READ ONLY;
SET LOCAL statement_timeout = '60s';

-- Тест 1: по доставувач и датум
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM kbnteam.v_driver_deliveries
WHERE driver_user_id = 1
  AND delivery_date >= DATE '2026-09-01'
  AND delivery_date < DATE '2026-10-01';

-- Тест 2: по компаниска нарачка
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM kbnteam.v_driver_deliveries
WHERE comp_order_id = 1;

ROLLBACK;

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

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

Метрика Тест 1 (по доставувач и датум) Тест 2 (по компаниска нарачка)
Planning Time _ ms _ ms
Execution Time _ ms _ ms
Rows Returned _ _
Начин на читање по табела _ _
Shared Hit Blocks _ _
Shared Read Blocks _ _
-- Планови и резултати пред дополнителното индексирање:

Дополнителни и заеднички индекси

company_order(delivery_id) има уникатен индекс. Прегледот ги користи и индексите за нарачките преку v_orders_full.

Индекс Табела и колони Намена
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.
idx_delivery_driver_user_id_delivery_date delivery(driver_user_id, delivery_date) Пронаоѓање достави по доставувач; во прегледите за нарачки и достави и по датум.
idx_driver_rest_id driver(rest_id) Пронаоѓање доставувачи по ресторан.
CREATE INDEX IF NOT EXISTS idx_company_order_company_id
ON kbnteam.company_order (company_id);

CREATE INDEX IF NOT EXISTS idx_customer_order_comp_order_id
ON kbnteam.customer_order (comp_order_id);

CREATE INDEX IF NOT EXISTS idx_order_meal_order_id_meal_id
ON kbnteam.order_meal (order_id, meal_id);

CREATE INDEX IF NOT EXISTS idx_order_drink_order_id_drink_id
ON kbnteam.order_drink (order_id, drink_id);

CREATE INDEX IF NOT EXISTS idx_delivery_driver_user_id_delivery_date
ON kbnteam.delivery (driver_user_id, delivery_date);

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

Проверка на индексите

SELECT tablename, indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'kbnteam'
  AND indexname IN (
    'idx_company_order_company_id',
    'idx_customer_order_comp_order_id',
    'idx_order_meal_order_id_meal_id',
    'idx_order_drink_order_id_drink_id',
    'idx_delivery_driver_user_id_delivery_date',
    'idx_driver_rest_id'
)
ORDER BY tablename, indexname;

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

Мерењето ги користи истите тест прашалници и услови како почетното мерење.

Метрика Тест 1 (по доставувач и датум) Тест 2 (по компаниска нарачка)
Planning Time _ ms _ ms
Execution Time _ ms _ ms
Rows Returned _ _
Начин на читање по табела _ _
Shared Hit Blocks _ _
Shared Read Blocks _ _
-- Планови и резултати по дополнителното индексирање:

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

Метрика Пред По Промена (%)
Execution Time (Тест 1) _ ms _ ms _ %
Execution Time (Тест 2) _ ms _ ms _ %

Промената се пресметува како 100 × (време пред − време по) / време пред, кога почетното време е поголемо од нула. Негативна вредност означува побавно извршување.

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

Note: See TracWiki for help on using the wiki.