| Version 4 (modified by , 11 days ago) ( diff ) |
|---|
Индекси: v_driver_deliveries_index
| Својство | Вредност |
|---|---|
| Шема | kbnteam
|
| Област | Нарачки и достави |
| Главен преглед | v_driver_deliveries |
Опис
Индексите го поддржуваат пристапот до податоците за нарачки и достави. Се поставуваат врз изворните табели и можат да се користат од повеќе прегледи.
company_order(delivery_id) има уникатен индекс. Прегледот ги користи и индексите за нарачките преку v_orders_full.
DDL
CREATE INDEX IF NOT EXISTS idx_delivery_driver_user_id_delivery_date ON kbnteam.delivery (driver_user_id, delivery_date);
Поддржани прегледи
| Индекс | Прегледи | Намена |
|---|---|---|
idx_company_order_company_id | v_orders_full, v_driver_deliveries, v_reviews_full, v_contracts_revenue, v_company_billing_overview | Пронаоѓање компаниски нарачки по компанија. |
idx_customer_order_comp_order_id | v_orders_full, v_driver_deliveries, v_reviews_full, v_contracts_revenue, v_company_billing_overview | Пронаоѓање клиентски нарачки по компаниска нарачка. |
idx_order_meal_order_id_meal_id | v_orders_full, v_driver_deliveries, v_contracts_revenue | Пристап до јадењата на нарачката и групирање по order_id. |
idx_order_drink_order_id_drink_id | v_orders_full, v_driver_deliveries, v_contracts_revenue | Пристап до пијалоците на нарачката и групирање по order_id. |
idx_delivery_driver_user_id_delivery_date | v_driver_deliveries, v_orders_full, v_reviews_full | Пронаоѓање достави по доставувач; во прегледите за нарачки и достави и по датум. |
idx_driver_rest_id | v_driver_lunch_timers, v_driver_deliveries | Пронаоѓање доставувачи по ресторан. |
Заеднички индекси
| Индекс | Поврзана документација |
|---|---|
idx_company_order_company_id | Индекси за нарачки и достави |
idx_customer_order_comp_order_id | Индекси за нарачки и достави |
idx_order_meal_order_id_meal_id | Индекси за нарачки и достави |
idx_order_drink_order_id_drink_id | Индекси за нарачки и достави |
idx_driver_rest_id | Индекси за термини за ручек |
Колонски план
| Индекс | Табела | Прва колона | Следни колони | Намена |
|---|---|---|---|---|
idx_company_order_company_id | company_order | company_id | — | Пронаоѓање компаниски нарачки по компанија. |
idx_customer_order_comp_order_id | customer_order | comp_order_id | — | Пронаоѓање клиентски нарачки по компаниска нарачка. |
idx_order_meal_order_id_meal_id | order_meal | order_id | meal_id | Пристап до јадењата на нарачката и групирање по order_id. |
idx_order_drink_order_id_drink_id | order_drink | order_id | drink_id | Пристап до пијалоците на нарачката и групирање по order_id. |
idx_delivery_driver_user_id_delivery_date | delivery | driver_user_id | delivery_date | Пронаоѓање достави по доставувач; во прегледите за нарачки и достави и по датум. |
idx_driver_rest_id | driver | rest_id | — | Пронаоѓање доставувачи по ресторан. |
Првата колона го определува вообичаениот почеток на пребарувањето со составен индекс. Присуството на други колони не значи дека индексот ги содржи сите податоци потребни за прегледот.
Верификација
SELECT tablename, indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'kbnteam'
AND indexname IN (
'idx_company_order_company_id',
'idx_customer_order_comp_order_id',
'idx_order_meal_order_id_meal_id',
'idx_order_drink_order_id_drink_id',
'idx_delivery_driver_user_id_delivery_date',
'idx_driver_rest_id'
)
ORDER BY tablename, indexname;
Проверката ги прикажува имињата и дефинициите. IF NOT EXISTS спречува повторно креирање под исто име, но не проверува дали постојната дефиниција е еднаква на наведената.
Влијание врз перформансите
Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење.
Тестирање на перформанси
„Пред индексирање“ и „по индексирање“ ги означуваат групите наведени како „без индекси“ и „со индекси“ во евиденцијата. Точниот сет присутни индекси во секоја група не е евидентиран; „без индекси“ не потврдува отсуство на индекси од примарни и уникатни клучеви.
Наведените времиња се клиентски мерења од DBeaver, а не серверските Planning Time и Execution Time од EXPLAIN ANALYZE. Нема приложени планови, типови на скенирање или податоци за баферите. Вредностите се во милисекунди (ms).
Прашалникот и дополнителното тестирање се опишани во v_driver_deliveries.
Измерен прашалник
SELECT * FROM kbnteam.v_driver_deliveries WHERE driver_user_id = 450;
Резултати пред индексирање
| Метрика | Измерен резултат |
|---|---|
| Клиентско време (ms) | околу 70000 |
| Приказ на мерењето | Време прикажано со резултатот во DBeaver |
| Прикажани / преземени редови | 200 преземени; вкупниот број не е утврден |
| Planning Time / Execution Time од EXPLAIN | Не се измерени |
| План, тип на скенирање и бафери | Не се приложени |
Резултати по индексирање
| Метрика | Измерен резултат |
|---|---|
| Клиентско време (ms) | 48236 |
| Приказ на мерењето | Статистика за 2 наредби: 48208 ms извршување, 28 ms преземање, 48236 ms вкупно |
| Прикажани / преземени редови | Не е утврден од приказот на статистиката |
| Planning Time / Execution Time од EXPLAIN | Не се измерени |
| План, тип на скенирање и бафери | Не се приложени |
Анализа на резултатите
| Метрика | Пред | По | Промена на времето |
|---|---|---|---|
| Клиентско време (ms) | околу 70000 | 48236 | Не се пресметува |
Споредбата е ориентациска. Во состојбата „без индекси“ се гледаат околу 1 min 10 s и 200 преземени редови, со ограничување на преземањето на 200. Во состојбата „со индекси“ се прикажува статистика за 2 наредби: 48208 ms извршување, 28 ms преземање и 48236 ms вкупно. Еден прикажан ред во статистиката не е бројот на достави. Не се пресметува процент на забрзување поради различниот опфат на мерењата.
Ова се поединечни набљудувања. Не се евидентирани контролирани повторувања, исти услови за кеширање и оптоварување или точните дефиниции на присутните индекси. Затоа промената на времето не е доказ дека индексите се единствената причина. Не се приложени мерења за INSERT, UPDATE и DELETE.
Измерената разлика се однесува на целиот прашалник и двете означени состојби. Не е измерен одделниот придонес на секој индекс наведен на оваа страница.
