| Version 1 (modified by , 2 weeks ago) ( diff ) |
|---|
Индекс: v_orders_full_index
| Датотека | indexes/v_orders_full_index.sql
|
|---|---|
| Шема | kbnteam
|
| Поврзани прегледи | v_orders_full, v_driver_deliveries, v_contracts_revenue, v_company_billing_overview, v_reviews_full
|
Опис
Пет индекси за поддршка на најкомплексниот преглед во шемата — v_orders_full. Покриваат четири критични патеки: нарачки по купувач/датум, нарачки по компаниска нарачка, достави по возач/датум, и агрегации на ставки.
Многу од овие индекси се споделени и се користат и во другите прегледи.
DDL
-- indexes/v_orders_full_index.sql CREATE INDEX IF NOT EXISTS idx_customer_order_comp_order_id ON kbnteam.customer_order (comp_order_id); CREATE INDEX IF NOT EXISTS idx_customer_order_customer_user_id_order_datetime ON kbnteam.customer_order (customer_user_id, order_datetime DESC); CREATE INDEX IF NOT EXISTS idx_delivery_driver_user_id_delivery_date ON kbnteam.delivery (driver_user_id, delivery_date); 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);
Поддржани прегледи
| Индекс | Прегледи | Цел |
|---|---|---|
idx_customer_order_comp_order_id | v_orders_full, v_driver_deliveries, v_contracts_revenue, v_company_billing_overview, v_reviews_full | JOIN customer_order → company_order по comp_order_id |
idx_customer_order_customer_user_id_order_datetime | v_orders_full, v_customer_loyalty_full_v2 | WHERE customer_user_id; ORDER BY order_datetime |
idx_delivery_driver_user_id_delivery_date | v_orders_full, v_driver_deliveries | WHERE driver_user_id + датумски опсег |
idx_order_meal_order_id_meal_id | v_orders_full, v_driver_deliveries, v_contracts_revenue | CTE order_meals — GROUP BY order_id |
idx_order_drink_order_id_drink_id | v_orders_full, v_driver_deliveries, v_contracts_revenue | CTE order_drinks — GROUP BY order_id |
Колонски план
| Индекс | Колона 1 | Колона 2 | Причина |
|---|---|---|---|
idx_customer_order_comp_order_id | comp_order_id | — | FK JOIN со company_order
|
idx_customer_order_customer_user_id_order_datetime | customer_user_id (leading) | order_datetime DESC | Порано датумски записи прво; поддржува и ORDER BY |
idx_delivery_driver_user_id_delivery_date | driver_user_id (leading) | delivery_date | Достави по возач во датумски опсег |
idx_order_meal_order_id_meal_id | order_id (leading) | meal_id (covering) | CTE GROUP BY на order_id |
idx_order_drink_order_id_drink_id | order_id (leading) | drink_id (covering) | CTE GROUP BY на order_id |
Верификација
SELECT indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'kbnteam'
AND indexname IN (
'idx_customer_order_comp_order_id',
'idx_customer_order_customer_user_id_order_datetime',
'idx_delivery_driver_user_id_delivery_date',
'idx_order_meal_order_id_meal_id',
'idx_order_drink_order_id_drink_id'
);
Очекувано влијание
Овие пет индекси заедно го трансформираат скенирањето на v_orders_full при филтрирани прашалници. Без индекси, секоја JOIN операција прави Seq Scan на целите табели. По индексирање, прашалниците по customer_user_id, comp_order_id или driver_user_id треба да видат Index Scan или Bitmap Index Scan.
Note:
See TracWiki
for help on using the wiki.
