Changes between Version 1 and Version 2 of CompanyBillingOverviewIndex


Ignore:
Timestamp:
09/14/26 00:48:36 (2 weeks ago)
Author:
223235
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CompanyBillingOverviewIndex

    v1 v2  
    1 = Индекс: v_company_billing_overview_index =
     1= Индекси: v_company_billing_overview_index =
    22
    3 ||= Датотека ||= `indexes/v_company_billing_overview_index.sql` ||
    4 ||= Шема ||= `kbnteam` ||
    5 ||= Поврзани прегледи ||= `v_company_billing_overview`, `v_contracts_revenue`, `v_company_users` ||
     3||= Својство ||= Вредност ||
     4|| Шема || `kbnteam` ||
     5|| Област || Фактурирање ||
     6|| Главен преглед || [wiki:CompanyBillingOverviewView v_company_billing_overview] ||
    67
    78== Опис ==
    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Индексите го поддржуваат пристапот до податоците за фактурирање. Се поставуваат врз изворните табели и можат да се користат од повеќе прегледи.
     11
     12`invoice(comp_order_id)` има уникатен индекс. За пребарувањето и агрегациите се користат заедничките индекси за нарачки и договори; не е потребен посебен индекс само на contract(company_id).
    913
    1014== DDL ==
     15
     16Овој преглед ги користи основните и заедничките индекси наведени подолу. Нема посебна дополнителна дефиниција на индекс само за него.
     17
     18== Поддржани прегледи ==
     19
     20||= Индекс ||= Прегледи ||= Намена ||
     21|| `idx_company_order_company_id` || [wiki:OrdersFullView v_orders_full], [wiki:DriverDeliveriesView v_driver_deliveries], [wiki:ReviewsFullView v_reviews_full], [wiki:ContractsRevenueView v_contracts_revenue], [wiki:CompanyBillingOverviewView v_company_billing_overview] || Пронаоѓање компаниски нарачки по компанија. ||
     22|| `idx_customer_order_comp_order_id` || [wiki:OrdersFullView v_orders_full], [wiki:DriverDeliveriesView v_driver_deliveries], [wiki:ReviewsFullView v_reviews_full], [wiki:ContractsRevenueView v_contracts_revenue], [wiki:CompanyBillingOverviewView v_company_billing_overview] || Пронаоѓање клиентски нарачки по компаниска нарачка. ||
     23|| `idx_contract_company_id_rest_id` || [wiki:ContractsRevenueView v_contracts_revenue], [wiki:CompanyBillingOverviewView v_company_billing_overview], [wiki:DriverLunchTimersView v_driver_lunch_timers] || Пребарување договори по компанија и ресторан и групирање по компанија. ||
     24
     25== Заеднички индекси ==
     26
     27||= Индекс ||= Поврзана документација ||
     28|| `idx_company_order_company_id` || [wiki:OrdersFullIndex Индекси за нарачки и достави] ||
     29|| `idx_customer_order_comp_order_id` || [wiki:OrdersFullIndex Индекси за нарачки и достави] ||
     30|| `idx_contract_company_id_rest_id` || [wiki:ContractsRevenueIndex Индекси за договори и приходи] ||
     31
     32== Колонски план ==
     33
     34||= Индекс ||= Табела ||= Прва колона ||= Следни колони ||= Намена ||
     35|| `idx_company_order_company_id` || `company_order` || `company_id` || — || Пронаоѓање компаниски нарачки по компанија. ||
     36|| `idx_customer_order_comp_order_id` || `customer_order` || `comp_order_id` || — || Пронаоѓање клиентски нарачки по компаниска нарачка. ||
     37|| `idx_contract_company_id_rest_id` || `contract` || `company_id` || `rest_id` || Пребарување договори по компанија и ресторан и групирање по компанија. ||
     38
     39Првата колона го определува вообичаениот почеток на пребарувањето со составен индекс. Присуството на други колони не значи дека индексот ги содржи сите податоци потребни за прегледот.
     40
     41== Верификација ==
     42
    1143{{{
    1244#!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
     45SELECT tablename, indexname, indexdef
    4246FROM pg_indexes
    4347WHERE schemaname = 'kbnteam'
    4448  AND indexname IN (
    45       'idx_contract_company_id',
    46       'idx_customer_order_comp_order_id'
    47   );
     49    'idx_company_order_company_id',
     50    'idx_customer_order_comp_order_id',
     51    'idx_contract_company_id_rest_id'
     52)
     53ORDER BY tablename, indexname;
    4854}}}
     55
     56Проверката ги прикажува имињата и дефинициите. IF NOT EXISTS спречува повторно креирање под исто име, но не проверува дали постојната дефиниција е еднаква на наведената.
     57
     58== Влијание врз перформансите ==
     59
     60Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење.
     61
     62Договорите се бројат одделно, додека бројот и износот на клиентските нарачки се пресметуваат во главниот преглед. Индексите не ги складираат пресметаните износи.
     63
     64== Тестирање на перформанси ==
     65
     66Тест прашалниците за овој преглед се наведени во [wiki:CompanyBillingOverviewView v_company_billing_overview].
     67
     68=== Резултати пред индексирање ===
     69
     70||= Прашалник ||= Execution Time (ms) ||= План / забелешки ||
     71|| Тест 1: по компанија || ___ || ___ ||
     72|| Тест 2: по компаниска нарачка || ___ || ___ ||
     73
     74=== Резултати по индексирање ===
     75
     76||= Прашалник ||= Execution Time (ms) ||= План / забелешки ||
     77|| Тест 1: по компанија || ___ || ___ ||
     78|| Тест 2: по компаниска нарачка || ___ || ___ ||