| Датотека | indexes/v_menu_drink_index.sql
|
|---|
| Шема | kbnteam
|
|---|
| Поврзани прегледи | v_menu_drink, v_customer_contract_drinks, v_customer_contract_menu
|
|---|
Опис
Композитен индекс на табелата drink за поддршка на JOIN-от по rest_id и директно лоцирање на записи по drink_id. Ги подобрува пребарувањата на мени по ресторан.
DDL
-- 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);
Поддржани прегледи
| Преглед | Колона | Начин на употреба
|
|---|
v_menu_drink | drink.rest_id → restaurant.rest_id | JOIN и WHERE филтрирање
|
v_customer_contract_drinks | drink.rest_id → contract.rest_id | JOIN во ланецот customer → company → contract → restaurant → drink
|
v_customer_contract_menu | Посредно преку v_customer_contract_drinks | UNION ALL дел за пијачи
|
Колонски план
| Колона | Позиција | Причина
|
|---|
rest_id | 1-ва (leading) | Прима JOIN-от по ресторан; се користи и за WHERE rest_id = ?
|
drink_id | 2-ра (covering) | Овозможува index-only scan; ги опфаќа Look-Up-овите по drink_id
|
Верификација
SELECT indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'kbnteam'
AND indexname = 'idx_drink_rest_id_drink_id';
Очекувано влијание
При филтрирање по rest_id, планерот треба да премине од Seq Scan (читање на целата табела drink) кон Index Scan или Bitmap Index Scan. Особено значајно кога има многу ресторани или голем мени каталог.