Индекси: v_driver_deliveries_index
| Својство | Вредност |
|---|---|
| Шема | kbnteam
|
| Област | Нарачки и достави |
| Главен преглед | v_driver_deliveries |
Опис
Ова е една од трите групи со дополнително индексирање. Индексите се поставуваат врз изворните табели и го поддржуваат пребарувањето и поврзувањето на податоците.
Индекси во оваа група
| Индекс | Табела и колони | Намена |
|---|---|---|
idx_delivery_driver_user_id_delivery_date | delivery(driver_user_id, delivery_date) | Пребарување достави по доставувач и датум. |
DDL
CREATE INDEX IF NOT EXISTS idx_delivery_driver_user_id_delivery_date ON kbnteam.delivery (driver_user_id, delivery_date);
Заедничка индексна поддршка
За поврзаните табели се користат и индексите опишани во v_orders_full_index.
| Индекс | Табела и колони | Намена |
|---|---|---|
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. |
Проверка на индексите
SELECT tablename, indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'kbnteam'
AND indexname IN (
'idx_delivery_driver_user_id_delivery_date',
'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'
)
ORDER BY tablename, indexname;
Проверката ги прикажува дефинициите на задржаните индекси. Изборот на индекс при извршување зависи од прашалникот и податоците.
Тестирање на перформанси
Резултатите се однесуваат на 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 се извршуваат со прифатлива брзина. Овие мерења ја опишуваат тестираната состојба на базата и не се споредба пред и по индексирање.
Резултатите се за целите прашалници, а не за одделниот придонес на секој индекс.
