Changes between Version 1 and Version 2 of ContractsRevenueIndex


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

--

Legend:

Unmodified
Added
Removed
Modified
  • ContractsRevenueIndex

    v1 v2  
    1 = Индекс: v_contracts_revenue_index =
     1= Индекси: v_contracts_revenue_index =
    22
    3 ||= Датотека ||= `indexes/v_contracts_revenue_index.sql` ||
    4 ||= Шема ||= `kbnteam` ||
    5 ||= Поврзани прегледи ||= `v_contracts_revenue`, `v_company_billing_overview`, `v_orders_full`, `v_driver_deliveries` ||
     3||= Својство ||= Вредност ||
     4|| Шема || `kbnteam` ||
     5|| Област || Договори и приходи ||
     6|| Главен преглед || [wiki:ContractsRevenueView v_contracts_revenue] ||
    67
    78== Опис ==
    8 Четири индекси за поддршка на прегледот `v_contracts_revenue`. Таргетираат CTE-то `order_restaurants` (UNION по order_meal и order_drink) и главниот SELECT за договори по компанија и ресторан.
     9
     10Индексите го поддржуваат пристапот до податоците за договори и приходи. Се поставуваат врз изворните табели и можат да се користат од повеќе прегледи.
     11
     12`contract(company_id, rest_id)` поддржува и услов само по company_id. Индексот со rest_id како прва колона ја поддржува другата насока на пребарување.
    913
    1014== DDL ==
     15
    1116{{{
    1217#!sql
    13 -- indexes/v_contracts_revenue_index.sql
    14 CREATE INDEX IF NOT EXISTS idx_order_meal_order_id_meal_id
    15 ON kbnteam.order_meal (order_id, meal_id);
    16 
    17 CREATE INDEX IF NOT EXISTS idx_order_drink_order_id_drink_id
    18 ON kbnteam.order_drink (order_id, drink_id);
    19 
    20 CREATE INDEX IF NOT EXISTS idx_customer_order_comp_order_id
    21 ON kbnteam.customer_order (comp_order_id);
    22 
    2318CREATE INDEX IF NOT EXISTS idx_contract_company_id_rest_id
    2419ON kbnteam.contract (company_id, rest_id);
    … …  
    2621
    2722== Поддржани прегледи ==
    28 ||= Индекс ||= Прегледи ||= Цел ||
    29 || `idx_order_meal_order_id_meal_id` || `v_contracts_revenue`, `v_orders_full`, `v_driver_deliveries` || CTE `order_restaurants` UNION (страна на оброци) ||
    30 || `idx_order_drink_order_id_drink_id` || `v_contracts_revenue`, `v_orders_full`, `v_driver_deliveries` || CTE `order_restaurants` UNION (страна на пијачи) ||
    31 || `idx_customer_order_comp_order_id` || `v_contracts_revenue` и повеќе | CTE `contract_metrics` JOIN со `company_order` ||
    32 || `idx_contract_company_id_rest_id` || `v_contracts_revenue`, `v_company_billing_overview` || Главен SELECT WHERE company_id; JOIN company+restaurant ||
     23
     24||= Индекс ||= Прегледи ||= Намена ||
     25|| `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] || Пронаоѓање компаниски нарачки по компанија. ||
     26|| `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] || Пронаоѓање клиентски нарачки по компаниска нарачка. ||
     27|| `idx_order_meal_order_id_meal_id` || [wiki:OrdersFullView v_orders_full], [wiki:DriverDeliveriesView v_driver_deliveries], [wiki:ContractsRevenueView v_contracts_revenue] || Пристап до јадењата на нарачката и групирање по order_id. ||
     28|| `idx_order_drink_order_id_drink_id` || [wiki:OrdersFullView v_orders_full], [wiki:DriverDeliveriesView v_driver_deliveries], [wiki:ContractsRevenueView v_contracts_revenue] || Пристап до пијалоците на нарачката и групирање по order_id. ||
     29|| `idx_contract_company_id_rest_id` || [wiki:ContractsRevenueView v_contracts_revenue], [wiki:CompanyBillingOverviewView v_company_billing_overview], [wiki:DriverLunchTimersView v_driver_lunch_timers] || Пребарување договори по компанија и ресторан и групирање по компанија. ||
     30|| `idx_contract_rest_id_company_id` || [wiki:DriverLunchTimersView v_driver_lunch_timers], [wiki:ContractsRevenueView v_contracts_revenue] || Пронаоѓање договори почнувајќи од ресторан. ||
     31
     32== Заеднички индекси ==
     33
     34||= Индекс ||= Поврзана документација ||
     35|| `idx_company_order_company_id` || [wiki:OrdersFullIndex Индекси за нарачки и достави] ||
     36|| `idx_customer_order_comp_order_id` || [wiki:OrdersFullIndex Индекси за нарачки и достави] ||
     37|| `idx_order_meal_order_id_meal_id` || [wiki:OrdersFullIndex Индекси за нарачки и достави] ||
     38|| `idx_order_drink_order_id_drink_id` || [wiki:OrdersFullIndex Индекси за нарачки и достави] ||
     39|| `idx_contract_rest_id_company_id` || [wiki:DriverLunchTimersIndex Индекси за термини за ручек] ||
    3340
    3441== Колонски план ==
    35 ||= Индекс ||= Колона 1 ||= Колона 2 ||= Причина ||
    36 || `idx_order_meal_order_id_meal_id` || `order_id` || `meal_id` || CTE UNION агрегација по нарачка ||
    37 || `idx_order_drink_order_id_drink_id` || `order_id` || `drink_id` || CTE UNION агрегација по нарачка ||
    38 || `idx_customer_order_comp_order_id` || `comp_order_id` || — || FK JOIN customer_order → company_order ||
    39 || `idx_contract_company_id_rest_id` || `company_id` (leading) || `rest_id` || Composite ключ за договори по компанија+ресторан ||
     42
     43||= Индекс ||= Табела ||= Прва колона ||= Следни колони ||= Намена ||
     44|| `idx_company_order_company_id` || `company_order` || `company_id` || — || Пронаоѓање компаниски нарачки по компанија. ||
     45|| `idx_customer_order_comp_order_id` || `customer_order` || `comp_order_id` || — || Пронаоѓање клиентски нарачки по компаниска нарачка. ||
     46|| `idx_order_meal_order_id_meal_id` || `order_meal` || `order_id` || `meal_id` || Пристап до јадењата на нарачката и групирање по order_id. ||
     47|| `idx_order_drink_order_id_drink_id` || `order_drink` || `order_id` || `drink_id` || Пристап до пијалоците на нарачката и групирање по order_id. ||
     48|| `idx_contract_company_id_rest_id` || `contract` || `company_id` || `rest_id` || Пребарување договори по компанија и ресторан и групирање по компанија. ||
     49|| `idx_contract_rest_id_company_id` || `contract` || `rest_id` || `company_id` || Пронаоѓање договори почнувајќи од ресторан. ||
     50
     51Првата колона го определува вообичаениот почеток на пребарувањето со составен индекс. Присуството на други колони не значи дека индексот ги содржи сите податоци потребни за прегледот.
    4052
    4153== Верификација ==
     54
    4255{{{
    4356#!sql
    44 SELECT indexname, indexdef
     57SELECT tablename, indexname, indexdef
    4558FROM pg_indexes
    4659WHERE schemaname = 'kbnteam'
    4760  AND indexname IN (
    48       'idx_order_meal_order_id_meal_id',
    49       'idx_order_drink_order_id_drink_id',
    50       'idx_customer_order_comp_order_id',
    51       'idx_contract_company_id_rest_id'
    52   );
     61    'idx_company_order_company_id',
     62    'idx_customer_order_comp_order_id',
     63    'idx_order_meal_order_id_meal_id',
     64    'idx_order_drink_order_id_drink_id',
     65    'idx_contract_company_id_rest_id',
     66    'idx_contract_rest_id_company_id'
     67)
     68ORDER BY tablename, indexname;
    5369}}}
    5470
    55 == Очекувано влијание ==
    56 `idx_contract_company_id_rest_id` е специфичен за овој преглед. Ги забрзува агрегациите по компанија и ресторан и е особено корисен при извршување на финансиски извештаи за конкретна компанија.
     71Проверката ги прикажува имињата и дефинициите. IF NOT EXISTS спречува повторно креирање под исто име, но не проверува дали постојната дефиниција е еднаква на наведената.
     72
     73== Влијание врз перформансите ==
     74
     75Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење.
     76
     77== Тестирање на перформанси ==
     78
     79Тест прашалниците за овој преглед се наведени во [wiki:ContractsRevenueView v_contracts_revenue].
     80
     81=== Резултати пред индексирање ===
     82
     83||= Прашалник ||= Execution Time (ms) ||= План / забелешки ||
     84|| Тест 1: по компанија || ___ || ___ ||
     85|| Тест 2: по ресторан || ___ || ___ ||
     86
     87=== Резултати по индексирање ===
     88
     89||= Прашалник ||= Execution Time (ms) ||= План / забелешки ||
     90|| Тест 1: по компанија || ___ || ___ ||
     91|| Тест 2: по ресторан || ___ || ___ ||