= Индекс: 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 == {{{ #!sql -- 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 || == Верификација == {{{ #!sql 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.