| | 1 | = Индекс: v_menu_drink_index = |
| | 2 | |
| | 3 | ||= Датотека ||= `indexes/v_menu_drink_index.sql` || |
| | 4 | ||= Шема ||= `kbnteam` || |
| | 5 | ||= Поврзани прегледи ||= `v_menu_drink`, `v_customer_contract_drinks`, `v_customer_contract_menu` || |
| | 6 | |
| | 7 | == Опис == |
| | 8 | Композитен индекс на табелата `drink` за поддршка на JOIN-от по `rest_id` и директно лоцирање на записи по `drink_id`. Ги подобрува пребарувањата на мени по ресторан. |
| | 9 | |
| | 10 | == DDL == |
| | 11 | {{{ |
| | 12 | #!sql |
| | 13 | -- indexes/v_menu_drink_index.sql |
| | 14 | -- Note: uq_drink_restaurant_name already supports (rest_id, drink_name). |
| | 15 | CREATE INDEX IF NOT EXISTS idx_drink_rest_id_drink_id |
| | 16 | ON kbnteam.drink (rest_id, drink_id); |
| | 17 | }}} |
| | 18 | |
| | 19 | == Поддржани прегледи == |
| | 20 | ||= Преглед ||= Колона ||= Начин на употреба || |
| | 21 | || `v_menu_drink` || `drink.rest_id` → `restaurant.rest_id` || JOIN и WHERE филтрирање || |
| | 22 | || `v_customer_contract_drinks` || `drink.rest_id` → `contract.rest_id` || JOIN во ланецот customer → company → contract → restaurant → drink || |
| | 23 | || `v_customer_contract_menu` || Посредно преку `v_customer_contract_drinks` || UNION ALL дел за пијачи || |
| | 24 | |
| | 25 | == Колонски план == |
| | 26 | ||= Колона ||= Позиција ||= Причина || |
| | 27 | || `rest_id` || 1-ва (leading) || Прима JOIN-от по ресторан; се користи и за WHERE rest_id = ? || |
| | 28 | || `drink_id` || 2-ра (covering) || Овозможува index-only scan; ги опфаќа Look-Up-овите по drink_id || |
| | 29 | |
| | 30 | == Верификација == |
| | 31 | {{{ |
| | 32 | #!sql |
| | 33 | SELECT indexname, indexdef |
| | 34 | FROM pg_indexes |
| | 35 | WHERE schemaname = 'kbnteam' |
| | 36 | AND indexname = 'idx_drink_rest_id_drink_id'; |
| | 37 | }}} |
| | 38 | |
| | 39 | == Очекувано влијание == |
| | 40 | При филтрирање по `rest_id`, планерот треба да премине од Seq Scan (читање на целата табела `drink`) кон Index Scan или Bitmap Index Scan. Особено значајно кога има многу ресторани или голем мени каталог. |