wiki:OrdersFullIndex

Version 1 (modified by 185022, 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.