| Датотека | views/01_menu_drink_view.sql
|
|---|
| Шема | kbnteam
|
|---|
| Категорија | Мени и Каталог
|
|---|
| Поврзани индекси | indexes/v_menu_drink_index.sql
|
|---|
Опис
Едноставен преглед кој ги наведува сите пијачи достапни на секој ресторан заедно со деталите за ресторанот. Се користи за прелистување на мени и договорни нарачки преку веб апликацијата.
Зависности
| Табела | Тип на употреба
|
|---|
kbnteam.drink | Главна табела — ги содржи деталите за пијачот
|
kbnteam.restaurant | JOIN — ги додава деталите за ресторанот
|
Излезни колони
| Колона | Извор | Опис
|
|---|
drink_id | drink.drink_id | Примарен клуч на пијачот
|
drink_name | drink.drink_name | Назив на пијачот
|
drink_milliliters | drink.drink_milliliters | Волумен во милилитри
|
drink_price | drink.drink_price | Цена
|
rest_id | restaurant.rest_id | Примарен клуч на ресторанот
|
rest_name | restaurant.rest_name | Назив на ресторанот
|
SQL Дефиниција
CREATE OR REPLACE VIEW kbnteam.v_menu_drink AS
SELECT
d.drink_id,
d.drink_name,
d.drink_milliliters,
d.drink_price,
r.rest_id,
r.rest_name
FROM kbnteam.drink d
JOIN kbnteam.restaurant r ON r.rest_id = d.rest_id;
Тестирање на перформанси
Препорачано тест прашање
SET search_path TO kbnteam;
SET statement_timeout = '60s';
-- Тест 1: целосен скен на прегледот
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM kbnteam.v_menu_drink;
-- Тест 2: филтрирање по ресторан (препорачано за мерење на индексот)
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM kbnteam.v_menu_drink
WHERE rest_id = 1;
Резултати пред индексирање
Извршете ги горните прашања пред да ја примените датотеката indexes/v_menu_drink_index.sql.
| Метрика | Тест 1 (целосен скен) | Тест 2 (по rest_id)
|
|---|
| Planning Time | _ ms | _ ms
|
| Execution Time | _ ms | _ ms
|
| Rows Returned | _ | _
|
| Scan Type | _ | _
|
-- Излезот од EXPLAIN ANALYZE овде (пред индексирање)
Применети индекси
-- indexes/v_menu_drink_index.sql
-- Note: uq_drink_restaurant_name already supports (rest_id, drink_name).
CREATE INDEX IF NOT EXISTS idx_drink_rest_id_drink_id
ON kbnteam.drink (rest_id, drink_id);
Резултати по индексирање
Извршете ги истите прашања по примена на indexes/v_menu_drink_index.sql.
| Метрика | Тест 1 (целосен скен) | Тест 2 (по rest_id)
|
|---|
| Planning Time | _ ms | _ ms
|
| Execution Time | _ ms | _ ms
|
| Rows Returned | _ | _
|
| Scan Type | _ | _
|
-- Излезот од EXPLAIN ANALYZE овде (по индексирање)
Анализа на подобрување
| Метрика | Пред | По | Δ Подобрување
|
|---|
| Execution Time | _ ms | _ ms | _ %
|
| Scan Type (Тест 2) | Seq Scan | Index Scan | —
|
Очекувано: idx_drink_rest_id_drink_id на drink(rest_id, drink_id) го поддржува JOIN-от со restaurant и директното филтрирање по rest_id. На мали датасети планерот може да остане на Seq Scan. Подобрувањето е поизразено при филтрирање по конкретен ресторан.