| Version 6 (modified by , 11 days ago) ( diff ) |
|---|
Индекси: v_orders_full_index
| Својство | Вредност |
|---|---|
| Шема | kbnteam
|
| Област | Нарачки и достави |
| Главен преглед | v_orders_full |
Опис
Ова е една од трите групи со дополнително индексирање. Индексите се поставуваат врз изворните табели и го поддржуваат пребарувањето и поврзувањето на податоците.
Индекси во оваа група
| Индекс | Табела и колони | Намена |
|---|---|---|
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. |
DDL
CREATE INDEX IF NOT EXISTS idx_company_order_company_id ON kbnteam.company_order (company_id); CREATE INDEX IF NOT EXISTS idx_customer_order_comp_order_id ON kbnteam.customer_order (comp_order_id); CREATE INDEX IF NOT EXISTS idx_order_meal_order_id_meal_id ON kbnteam.order_meal (order_id, meal_id); CREATE INDEX IF NOT EXISTS idx_order_drink_order_id_drink_id ON kbnteam.order_drink (order_id, drink_id);
Заедничка индексна поддршка
За поврзаните табели се користат и индексите опишани во v_driver_deliveries_index.
| Индекс | Табела и колони | Намена |
|---|---|---|
idx_delivery_driver_user_id_delivery_date | delivery(driver_user_id, delivery_date) | Пребарување достави по доставувач и датум. |
Проверка на индексите
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'
)
ORDER BY tablename, indexname;
Проверката ги прикажува дефинициите на задржаните индекси. Изборот на индекс при извршување зависи од прашалникот и податоците.
Тестирање на перформанси
Резултатите се однесуваат на v_orders_full и неговата главна табела customer_order.
SELECT
Мерењата се евидентирани во DBeaver. Времињата се во милисекунди (ms).
SELECT * FROM kbnteam.v_orders_full WHERE customer_user_id = 1202947 AND order_total >= 40;
| Метрика | Пред индексирање | По индексирање |
|---|---|---|
| Клиентско време (ms) | 2598 | 2591 |
| Вратени редови | 1 | 1 |
Разликата е 7 ms, односно 0,3% пократко време. Во ова мерење нема значајна промена.
INSERT и UPDATE
Тестирани се по еден INSERT и еден UPDATE врз kbnteam.customer_order, главната табела на погледот. Се тестира додавање нарачка и поместување на времето на нарачката.
| Операција | Execute (ms) | Fetch (ms) | Вратени редови |
|---|---|---|---|
| INSERT | 16 | 14 | 1 |
| UPDATE | 18 | 16 | 1 |
Execute е времето на извршување прикажано во DBeaver. Fetch вредностите се преземени од дополнетата евиденција на тестирањето. Ова се клиентски времиња, изразени во милисекунди.
Двете операции се успешни и враќаат по еден ред преку RETURNING. По мерењето промените се вратени со ROLLBACK.
INSERT и UPDATE се извршуваат со прифатлива брзина. Овие мерења ја опишуваат тестираната состојба на базата и не се споредба пред и по индексирање.
Резултатите се за целите прашалници, а не за одделниот придонес на секој индекс.
