| | 1 | = Индекс: v_customer_loyalty_full_v2_index = |
| | 2 | |
| | 3 | ||= Датотека ||= `indexes/v_customer_loyalty_full_v2_index.sql` || |
| | 4 | ||= Шема ||= `kbnteam` || |
| | 5 | ||= Поврзани прегледи ||= `v_customer_loyalty_full_v2`, `v_customer_loyalty_full`, `v_orders_full` || |
| | 6 | |
| | 7 | == Опис == |
| | 8 | Единечен композитен индекс за поддршка на CTE-то `order_stats` во прегледот `v_customer_loyalty_full_v2`. Ги агрегира бројот на нарачки, вкупниот потрошен износ и датумот на последна нарачка по купувач. Колоната `order_datetime DESC` е додадена за поддршка на `MAX(order_datetime)` без Sort операции. |
| | 9 | |
| | 10 | Истиот индекс е дефиниран и во `v_orders_full_index.sql`. |
| | 11 | |
| | 12 | == DDL == |
| | 13 | {{{ |
| | 14 | #!sql |
| | 15 | -- indexes/v_customer_loyalty_full_v2_index.sql |
| | 16 | CREATE INDEX IF NOT EXISTS idx_customer_order_customer_user_id_order_datetime |
| | 17 | ON kbnteam.customer_order (customer_user_id, order_datetime DESC); |
| | 18 | }}} |
| | 19 | |
| | 20 | == Поддржани прегледи == |
| | 21 | ||= Преглед ||= Начин на употреба || |
| | 22 | || `v_customer_loyalty_full_v2` || CTE `order_stats` — GROUP BY `customer_user_id`, MAX `order_datetime` || |
| | 23 | || `v_customer_loyalty_full` || Вградено подпрашање — GROUP BY `customer_user_id`, MAX `order_datetime` || |
| | 24 | || `v_orders_full` || WHERE `customer_user_id = ?` и ORDER BY `order_datetime` || |
| | 25 | |
| | 26 | == Колонски план == |
| | 27 | ||= Колона ||= Позиција ||= Причина || |
| | 28 | || `customer_user_id` || 1-ва (leading) || Примарен GROUP BY клуч за агрегација на статистики по купувач || |
| | 29 | || `order_datetime DESC` || 2-ра ||MAX(order_datetime) — DESC редослед го избегнува Sort операцијата || |
| | 30 | |
| | 31 | == Верификација == |
| | 32 | {{{ |
| | 33 | #!sql |
| | 34 | SELECT indexname, indexdef |
| | 35 | FROM pg_indexes |
| | 36 | WHERE schemaname = 'kbnteam' |
| | 37 | AND indexname = 'idx_customer_order_customer_user_id_order_datetime'; |
| | 38 | }}} |
| | 39 | |
| | 40 | == Очекувано влијание == |
| | 41 | При прашалници по конкретен `customer_user_id` (на пр. проверка на поени за верност при најавување), индексот го трансформира Seq Scan на `customer_order` во Index Scan. `order_datetime DESC` е особено корисен ако апликацијата додатно ги сортира нарачките по датум. |