wiki:MenuMealIndex

Version 4 (modified by 223162, 12 days ago) ( diff )

--

Индекси: v_menu_meal_index

Својство Вредност
Шема kbnteam
Област Мени и каталог
Главен преглед v_menu_meal

Опис

Индексите го поддржуваат пристапот до податоците за мени и каталог. Се поставуваат врз изворните табели и можат да се користат од повеќе прегледи.

Уникатното ограничување uq_meal_restaurant_name веќе го покрива пребарувањето по ресторан. Обратниот редослед на колоните во индексите за состојки и алергени овозможува пристап од јадење кон состојка и од состојка кон алерген.

DDL

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);

Поддржани прегледи

Индекс Прегледи Намена
idx_meal_cat_id_meal_id v_menu_meal Пребарување јадења по категорија.
idx_meal_ingredient_meal_id_ingr_id v_menu_meal Пристап до состојките на јадењето и групирање по meal_id.
idx_alergen_ingredient_ingr_id_alergen_id v_menu_meal Пристап до алергените поврзани со состојката.

Колонски план

Индекс Табела Прва колона Следни колони Намена
idx_meal_cat_id_meal_id meal cat_id meal_id Пребарување јадења по категорија.
idx_meal_ingredient_meal_id_ingr_id meal_ingredient meal_id ingr_id Пристап до состојките на јадењето и групирање по meal_id.
idx_alergen_ingredient_ingr_id_alergen_id alergen_ingredient ingr_id alergen_id Пристап до алергените поврзани со состојката.

Првата колона го определува вообичаениот почеток на пребарувањето со составен индекс. Присуството на други колони не значи дека индексот ги содржи сите податоци потребни за прегледот.

Верификација

SELECT tablename, 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'
)
ORDER BY tablename, indexname;

Проверката ги прикажува имињата и дефинициите. IF NOT EXISTS спречува повторно креирање под исто име, но не проверува дали постојната дефиниција е еднаква на наведената.

Влијание врз перформансите

Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење.

Тестирање на перформанси

„Пред индексирање“ и „по индексирање“ ги означуваат групите наведени како „без индекси“ и „со индекси“ во евиденцијата. Точниот сет присутни индекси во секоја група не е евидентиран; „без индекси“ не потврдува отсуство на индекси од примарни и уникатни клучеви.

Наведените времиња се клиентски мерења од DBeaver, а не серверските Planning Time и Execution Time од EXPLAIN ANALYZE. Нема приложени планови, типови на скенирање или податоци за баферите. Вредностите се во милисекунди (ms).

Прашалникот и дополнителното тестирање се опишани во v_menu_meal.

Измерен прашалник

SELECT * FROM kbnteam.v_menu_meal
WHERE rest_id = 36 AND cat_id = 5;

Резултати пред индексирање

Метрика Измерен резултат
Клиентско време (ms) 106
Приказ на мерењето Статистика за 2 наредби: 106 ms извршување, 0 ms преземање, 106 ms вкупно
Прикажани / преземени редови Не е утврден од приказот на статистиката
Planning Time / Execution Time од EXPLAIN Не се измерени
План, тип на скенирање и бафери Не се приложени

Резултати по индексирање

Метрика Измерен резултат
Клиентско време (ms) 44
Приказ на мерењето Време прикажано со резултатот во DBeaver
Прикажани / преземени редови 0
Planning Time / Execution Time од EXPLAIN Не се измерени
План, тип на скенирање и бафери Не се приложени

Анализа на резултатите

Метрика Пред По Промена на времето
Клиентско време (ms) 106 44 -58,5%

Аритметичката разлика е 62 ms (58,5%) пократко време. Сепак, 106 ms е вкупно време во статистика за 2 наредби, а 44 ms е време од приказот на празен резултат. Ова не е контролирана споредба на изолирани SELECT извршувања. Потребни се повторени мерења со ист начин на мерење и пример што враќа јадења.

Промената се пресметува како 100 × (време по - време пред) / време пред. Негативна вредност значи пократко време, а позитивна подолго време. Процентот ја опишува разликата меѓу прикажаните вредности.

Ова се поединечни набљудувања. Не се евидентирани контролирани повторувања, исти услови за кеширање и оптоварување или точните дефиниции на присутните индекси. Затоа промената на времето не е доказ дека индексите се единствената причина. Не се приложени мерења за INSERT, UPDATE и DELETE.

Измерената разлика се однесува на целиот прашалник и двете означени состојби. Не е измерен одделниот придонес на секој индекс наведен на оваа страница.

Note: See TracWiki for help on using the wiki.