Changes between Initial Version and Version 1 of MenuMealIndex


Ignore:
Timestamp:
05/10/26 14:40:12 (2 weeks ago)
Author:
185022
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MenuMealIndex

    v1 v1  
     1= Индекс: v_menu_meal_index =
     2
     3||= Датотека ||= `indexes/v_menu_meal_index.sql` ||
     4||= Шема ||= `kbnteam` ||
     5||= Поврзани прегледи ||= `v_menu_meal`, `v_customer_contract_meals`, `v_customer_contract_menu` ||
     6
     7== Опис ==
     8Три индекси кои ги забрзуваат CTE агрегациите за состојки и алергени во прегледот `v_menu_meal` и сродните прегледи. Секој индекс таргетира различна табела вклучена во ланецот meal → meal_ingredient → alergen_ingredient.
     9
     10== DDL ==
     11{{{
     12#!sql
     13-- indexes/v_menu_meal_index.sql
     14-- Note: uq_meal_restaurant_name already supports (rest_id, meal_name).
     15CREATE INDEX IF NOT EXISTS idx_meal_cat_id_meal_id
     16ON kbnteam.meal (cat_id, meal_id);
     17
     18CREATE INDEX IF NOT EXISTS idx_meal_ingredient_meal_id_ingr_id
     19ON kbnteam.meal_ingredient (meal_id, ingr_id);
     20
     21CREATE INDEX IF NOT EXISTS idx_alergen_ingredient_ingr_id_alergen_id
     22ON kbnteam.alergen_ingredient (ingr_id, alergen_id);
     23}}}
     24
     25== Поддржани прегледи ==
     26||= Преглед ||= Индекс ||= Начин на употреба ||
     27|| `v_menu_meal` || `idx_meal_cat_id_meal_id` || WHERE cat_id = ? и JOIN со category ||
     28|| `v_menu_meal` || `idx_meal_ingredient_meal_id_ingr_id` || CTE `meal_ingredients` — JOIN meal_ingredient по meal_id ||
     29|| `v_menu_meal` || `idx_alergen_ingredient_ingr_id_alergen_id` || CTE `meal_allergens` — JOIN alergen_ingredient по ingr_id ||
     30|| `v_customer_contract_meals` || Сите три || Истите CTE шаблони ||
     31|| `v_customer_contract_menu` || Сите три || Посредно преку `v_customer_contract_meals` ||
     32
     33== Колонски план ==
     34||= Индекс ||= Табела ||= Колона 1 ||= Колона 2 ||= Причина ||
     35|| `idx_meal_cat_id_meal_id` || `meal` || `cat_id` (leading) || `meal_id` (covering) || Го поддржува JOIN по категорија и WHERE cat_id филтер ||
     36|| `idx_meal_ingredient_meal_id_ingr_id` || `meal_ingredient` || `meal_id` (leading) || `ingr_id` (covering) || CTE `meal_ingredients`: GROUP BY meal_id, JOIN ingredient по ingr_id ||
     37|| `idx_alergen_ingredient_ingr_id_alergen_id` || `alergen_ingredient` || `ingr_id` (leading) || `alergen_id` (covering) || CTE `meal_allergens`: JOIN alergen_ingredient по ingr_id ||
     38
     39== Верификација ==
     40{{{
     41#!sql
     42SELECT indexname, indexdef
     43FROM pg_indexes
     44WHERE schemaname = 'kbnteam'
     45  AND indexname IN (
     46      'idx_meal_cat_id_meal_id',
     47      'idx_meal_ingredient_meal_id_ingr_id',
     48      'idx_alergen_ingredient_ingr_id_alergen_id'
     49  );
     50}}}
     51
     52== Очекувано влијание ==
     53Трите индекси заедно ги намалуваат Hash Join/Sort операциите во CTE агрегациите. Поголемо подобрување е видливо кога постојат многу оброци и богати листи на состојки и алергени.