| Датотека | indexes/v_menu_meal_index.sql
|
|---|
| Шема | kbnteam
|
|---|
| Поврзани прегледи | v_menu_meal, v_customer_contract_meals, v_customer_contract_menu
|
|---|
Опис
Три индекси кои ги забрзуваат CTE агрегациите за состојки и алергени во прегледот v_menu_meal и сродните прегледи. Секој индекс таргетира различна табела вклучена во ланецот meal → meal_ingredient → alergen_ingredient.
DDL
-- indexes/v_menu_meal_index.sql
-- Note: uq_meal_restaurant_name already supports (rest_id, meal_name).
CREATE INDEX IF NOT EXISTS idx_meal_cat_id_meal_id
ON kbnteam.meal (cat_id, meal_id);
CREATE INDEX IF NOT EXISTS idx_meal_ingredient_meal_id_ingr_id
ON kbnteam.meal_ingredient (meal_id, ingr_id);
CREATE INDEX IF NOT EXISTS idx_alergen_ingredient_ingr_id_alergen_id
ON kbnteam.alergen_ingredient (ingr_id, alergen_id);
Поддржани прегледи
| Преглед | Индекс | Начин на употреба
|
|---|
v_menu_meal | idx_meal_cat_id_meal_id | WHERE cat_id = ? и JOIN со category
|
v_menu_meal | idx_meal_ingredient_meal_id_ingr_id | CTE meal_ingredients — JOIN meal_ingredient по meal_id
|
v_menu_meal | idx_alergen_ingredient_ingr_id_alergen_id | CTE meal_allergens — JOIN alergen_ingredient по ingr_id
|
v_customer_contract_meals | Сите три | Истите CTE шаблони
|
v_customer_contract_menu | Сите три | Посредно преку v_customer_contract_meals
|
Колонски план
| Индекс | Табела | Колона 1 | Колона 2 | Причина
|
|---|
idx_meal_cat_id_meal_id | meal | cat_id (leading) | meal_id (covering) | Го поддржува JOIN по категорија и WHERE cat_id филтер
|
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
|
idx_alergen_ingredient_ingr_id_alergen_id | alergen_ingredient | ingr_id (leading) | alergen_id (covering) | CTE meal_allergens: JOIN alergen_ingredient по ingr_id
|
Верификација
SELECT indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'kbnteam'
AND indexname IN (
'idx_meal_cat_id_meal_id',
'idx_meal_ingredient_meal_id_ingr_id',
'idx_alergen_ingredient_ingr_id_alergen_id'
);
Очекувано влијание
Трите индекси заедно ги намалуваат Hash Join/Sort операциите во CTE агрегациите. Поголемо подобрување е видливо кога постојат многу оброци и богати листи на состојки и алергени.