| Version 5 (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 спречува повторно креирање под исто име, но не проверува дали постојната дефиниција е еднаква на наведената.
Влијание врз перформансите
Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење.
Тестирање на перформанси
Резултатите се однесуваат на v_driver_deliveries и неговата главна табела delivery.
SELECT
Мерењата се евидентирани во DBeaver. Времињата се во милисекунди (ms).
SELECT * FROM kbnteam.v_driver_deliveries WHERE driver_user_id = 450;
| Мерење | Клиентско време (ms) | Приказ во DBeaver |
|---|---|---|
| Пред индексирање | околу 70000 | Преземени 200 редови |
| По индексирање | 48236 | Вкупно време за 2 наредби |
Во статистиката по индексирањето се прикажани следните времиња:
| Метрика | Време (ms) |
|---|---|
| Execute | 48208 |
| Fetch | 28 |
| Вкупно | 48236 |
Првото мерење прикажува околу 1 минута и 10 секунди за 200 редови, а второто статистика за две наредби. Споредбата е ориентациска поради различниот начин на мерење.
INSERT и UPDATE
Тестирани се по еден INSERT и еден UPDATE врз kbnteam.delivery, главната табела на погледот. Се тестира додавање достава и промена на забелешката.
| Операција | Execute (ms) | Fetch (ms) | Вратени редови |
|---|---|---|---|
| INSERT | 13 | 16 | 1 |
| UPDATE | 13 | 13 | 1 |
Execute е времето на извршување прикажано во DBeaver. Fetch вредностите се преземени од дополнетата евиденција на тестирањето. Ова се клиентски времиња, изразени во милисекунди.
Двете операции се успешни и враќаат по еден ред преку RETURNING. По мерењето промените се вратени со ROLLBACK.
INSERT и UPDATE се извршуваат со прифатлива брзина. Овие мерења ја опишуваат тестираната состојба на базата и не се споредба пред и по индексирање.
Резултатите се за целите прашалници, а не за одделниот придонес на секој индекс.
