| | 1 | = Индекс: v_company_billing_overview_index = |
| | 2 | |
| | 3 | ||= Датотека ||= `indexes/v_company_billing_overview_index.sql` || |
| | 4 | ||= Шема ||= `kbnteam` || |
| | 5 | ||= Поврзани прегледи ||= `v_company_billing_overview`, `v_contracts_revenue`, `v_company_users` || |
| | 6 | |
| | 7 | == Опис == |
| | 8 | Два индекси за поддршка на прегледот `v_company_billing_overview`. `idx_contract_company_id` го поддржува CTE-то `company_contracts` (GROUP BY company_id), а `idx_customer_order_comp_order_id` го поддржува LEFT JOIN во CTE-то `invoice_totals`. |
| | 9 | |
| | 10 | == DDL == |
| | 11 | {{{ |
| | 12 | #!sql |
| | 13 | -- indexes/v_company_billing_overview_index.sql |
| | 14 | CREATE INDEX IF NOT EXISTS idx_contract_company_id |
| | 15 | ON kbnteam.contract (company_id); |
| | 16 | |
| | 17 | CREATE INDEX IF NOT EXISTS idx_customer_order_comp_order_id |
| | 18 | ON kbnteam.customer_order (comp_order_id); |
| | 19 | }}} |
| | 20 | |
| | 21 | == Поддржани прегледи == |
| | 22 | ||= Индекс ||= Прегледи ||= Цел || |
| | 23 | || `idx_contract_company_id` || `v_company_billing_overview`, `v_company_users` || CTE `company_contracts` GROUP BY company_id; JOIN contract по company_id || |
| | 24 | || `idx_customer_order_comp_order_id` || `v_company_billing_overview` и многу други || LEFT JOIN `customer_order` → `company_order` по `comp_order_id` || |
| | 25 | |
| | 26 | == Колонски план == |
| | 27 | ||= Индекс ||= Колона ||= Причина || |
| | 28 | || `idx_contract_company_id` || `company_id` || Единечна колона — GROUP BY company_id во CTE `company_contracts` || |
| | 29 | || `idx_customer_order_comp_order_id` || `comp_order_id` || FK JOIN — `customer_order.comp_order_id` → `company_order.comp_order_id` || |
| | 30 | |
| | 31 | == Разлика помеѓу `idx_contract_company_id` и `idx_contract_company_id_rest_id` == |
| | 32 | ||= Индекс ||= Дефиниран во ||= Колони ||= Употреба || |
| | 33 | || `idx_contract_company_id` || `v_company_billing_overview_index.sql` | `(company_id)` || Единечна колона — само filteri по company_id || |
| | 34 | || `idx_contract_company_id_rest_id` || `v_contracts_revenue_index.sql` || `(company_id, rest_id)` || Composite — JOIN и filter по company+restaurant || |
| | 35 | |
| | 36 | PostgreSQL може да го користи `idx_contract_company_id_rest_id` и за прашалници со само `company_id` (leading column match), така да `idx_contract_company_id` е технички редундантен кога двата постојат. Сепак, единечниот индекс е покомпактен за само-company_id скенирање. |
| | 37 | |
| | 38 | == Верификација == |
| | 39 | {{{ |
| | 40 | #!sql |
| | 41 | SELECT indexname, indexdef |
| | 42 | FROM pg_indexes |
| | 43 | WHERE schemaname = 'kbnteam' |
| | 44 | AND indexname IN ( |
| | 45 | 'idx_contract_company_id', |
| | 46 | 'idx_customer_order_comp_order_id' |
| | 47 | ); |
| | 48 | }}} |