Changes between Initial Version and Version 1 of OrdersFullIndex


Ignore:
Timestamp:
05/10/26 14:41:38 (2 weeks ago)
Author:
185022
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OrdersFullIndex

    v1 v1  
     1= Индекс: v_orders_full_index =
     2
     3||= Датотека ||= `indexes/v_orders_full_index.sql` ||
     4||= Шема ||= `kbnteam` ||
     5||= Поврзани прегледи ||= `v_orders_full`, `v_driver_deliveries`, `v_contracts_revenue`, `v_company_billing_overview`, `v_reviews_full` ||
     6
     7== Опис ==
     8Пет индекси за поддршка на најкомплексниот преглед во шемата — `v_orders_full`. Покриваат четири критични патеки: нарачки по купувач/датум, нарачки по компаниска нарачка, достави по возач/датум, и агрегации на ставки.
     9
     10Многу од овие индекси се '''споделени''' и се користат и во другите прегледи.
     11
     12== DDL ==
     13{{{
     14#!sql
     15-- indexes/v_orders_full_index.sql
     16CREATE INDEX IF NOT EXISTS idx_customer_order_comp_order_id
     17ON kbnteam.customer_order (comp_order_id);
     18
     19CREATE INDEX IF NOT EXISTS idx_customer_order_customer_user_id_order_datetime
     20ON kbnteam.customer_order (customer_user_id, order_datetime DESC);
     21
     22CREATE INDEX IF NOT EXISTS idx_delivery_driver_user_id_delivery_date
     23ON kbnteam.delivery (driver_user_id, delivery_date);
     24
     25CREATE INDEX IF NOT EXISTS idx_order_meal_order_id_meal_id
     26ON kbnteam.order_meal (order_id, meal_id);
     27
     28CREATE INDEX IF NOT EXISTS idx_order_drink_order_id_drink_id
     29ON kbnteam.order_drink (order_id, drink_id);
     30}}}
     31
     32== Поддржани прегледи ==
     33||= Индекс ||= Прегледи ||= Цел ||
     34|| `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 ||
     35|| `idx_customer_order_customer_user_id_order_datetime` || `v_orders_full`, `v_customer_loyalty_full_v2` || WHERE customer_user_id; ORDER BY order_datetime ||
     36|| `idx_delivery_driver_user_id_delivery_date` || `v_orders_full`, `v_driver_deliveries` || WHERE driver_user_id + датумски опсег ||
     37|| `idx_order_meal_order_id_meal_id` || `v_orders_full`, `v_driver_deliveries`, `v_contracts_revenue` || CTE order_meals — GROUP BY order_id ||
     38|| `idx_order_drink_order_id_drink_id` || `v_orders_full`, `v_driver_deliveries`, `v_contracts_revenue` || CTE order_drinks — GROUP BY order_id ||
     39
     40== Колонски план ==
     41||= Индекс ||= Колона 1 ||= Колона 2 ||= Причина ||
     42|| `idx_customer_order_comp_order_id` || `comp_order_id` || — || FK JOIN со `company_order` ||
     43|| `idx_customer_order_customer_user_id_order_datetime` || `customer_user_id` (leading) || `order_datetime DESC` || Порано датумски записи прво; поддржува и ORDER BY ||
     44|| `idx_delivery_driver_user_id_delivery_date` || `driver_user_id` (leading) || `delivery_date` || Достави по возач во датумски опсег ||
     45|| `idx_order_meal_order_id_meal_id` || `order_id` (leading) || `meal_id` (covering) || CTE GROUP BY на order_id ||
     46|| `idx_order_drink_order_id_drink_id` || `order_id` (leading) || `drink_id` (covering) || CTE GROUP BY на order_id ||
     47
     48== Верификација ==
     49{{{
     50#!sql
     51SELECT indexname, indexdef
     52FROM pg_indexes
     53WHERE schemaname = 'kbnteam'
     54  AND indexname IN (
     55      'idx_customer_order_comp_order_id',
     56      'idx_customer_order_customer_user_id_order_datetime',
     57      'idx_delivery_driver_user_id_delivery_date',
     58      'idx_order_meal_order_id_meal_id',
     59      'idx_order_drink_order_id_drink_id'
     60  );
     61}}}
     62
     63== Очекувано влијание ==
     64Овие пет индекси заедно го трансформираат скенирањето на `v_orders_full` при филтрирани прашалници. Без индекси, секоја JOIN операција прави Seq Scan на целите табели. По индексирање, прашалниците по `customer_user_id`, `comp_order_id` или `driver_user_id` треба да видат Index Scan или Bitmap Index Scan.