Changes between Version 1 and Version 2 of DriverLunchTimersIndex


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

--

Legend:

Unmodified
Added
Removed
Modified
  • DriverLunchTimersIndex

    v1 v2  
    1 = Индекс: v_driver_lunch_timers_index =
     1= Индекси: v_driver_lunch_timers_index =
    22
    3 ||= Датотека ||= `indexes/v_driver_lunch_timers_index.sql` ||
    4 ||= Шема ||= `kbnteam` ||
    5 ||= Поврзани прегледи ||= `v_driver_lunch_timers`, `v_company_users` ||
     3||= Својство ||= Вредност ||
     4|| Шема || `kbnteam` ||
     5|| Област || Термини за ручек ||
     6|| Главен преглед || [wiki:DriverLunchTimersView v_driver_lunch_timers] ||
    67
    78== Опис ==
    8 Три индекси за поддршка на прегледот `v_driver_lunch_timers`. Таргетираат: распоред по ден од неделата, JOIN на возачи по ресторан и JOIN на договори по ресторан и компанија.
     9
     10Индексите го поддржуваат пристапот до податоците за термини за ручек. Се поставуваат врз изворните табели и можат да се користат од повеќе прегледи.
     11
     12Водечката колона contract_id овозможува пристап до термините според договорот. Самостоен услов само по lunch_weekday нема соодветен дополнителен индекс во овој сет.
    913
    1014== DDL ==
     15
    1116{{{
    1217#!sql
    13 -- indexes/v_driver_lunch_timers_index.sql
    14 CREATE INDEX IF NOT EXISTS idx_lunch_time_weekday_contract_id
    15 ON kbnteam.lunch_time (lunch_weekday, contract_id);
    16 
    1718CREATE INDEX IF NOT EXISTS idx_driver_rest_id
    1819ON kbnteam.driver (rest_id);
    … …  
    2021CREATE INDEX IF NOT EXISTS idx_contract_rest_id_company_id
    2122ON kbnteam.contract (rest_id, company_id);
     23
     24CREATE INDEX IF NOT EXISTS idx_lunch_time_contract_id
     25ON kbnteam.lunch_time (contract_id);
    2226}}}
    2327
    2428== Поддржани прегледи ==
    25 ||= Индекс ||= Прегледи ||= Цел ||
    26 || `idx_lunch_time_weekday_contract_id` || `v_driver_lunch_timers` || WHERE `lunch_weekday = ?`; JOIN `lunch_time` → `contract` ||
    27 || `idx_driver_rest_id` || `v_driver_lunch_timers`, `v_driver_deliveries`, `v_company_users` || JOIN `driver ON drv.rest_id = r.rest_id` ||
    28 || `idx_contract_rest_id_company_id` || `v_driver_lunch_timers` || JOIN `contract` по `rest_id` (complement на `idx_contract_company_id_rest_id`) ||
     29
     30||= Индекс ||= Прегледи ||= Намена ||
     31|| `idx_contract_company_id_rest_id` || [wiki:ContractsRevenueView v_contracts_revenue], [wiki:CompanyBillingOverviewView v_company_billing_overview], [wiki:DriverLunchTimersView v_driver_lunch_timers] || Пребарување договори по компанија и ресторан и групирање по компанија. ||
     32|| `idx_driver_rest_id` || [wiki:DriverLunchTimersView v_driver_lunch_timers], [wiki:DriverDeliveriesView v_driver_deliveries] || Пронаоѓање доставувачи по ресторан. ||
     33|| `idx_contract_rest_id_company_id` || [wiki:DriverLunchTimersView v_driver_lunch_timers], [wiki:ContractsRevenueView v_contracts_revenue] || Пронаоѓање договори почнувајќи од ресторан. ||
     34|| `idx_lunch_time_contract_id` || [wiki:DriverLunchTimersView v_driver_lunch_timers] || Пронаоѓање термини за конкретен договор, без услов за денот од неделата. ||
     35
     36== Заеднички индекси ==
     37
     38||= Индекс ||= Поврзана документација ||
     39|| `idx_contract_company_id_rest_id` || [wiki:ContractsRevenueIndex Индекси за договори и приходи] ||
    2940
    3041== Колонски план ==
    31 ||= Индекс ||= Колона 1 ||= Колона 2 ||= Причина ||
    32 || `idx_lunch_time_weekday_contract_id` || `lunch_weekday` (leading) || `contract_id` || Филтрирање по ден; JOIN со `contract` по `contract_id` ||
    33 || `idx_driver_rest_id` || `rest_id` || — || JOIN `driver.rest_id` = `restaurant.rest_id` ||
    34 || `idx_contract_rest_id_company_id` || `rest_id` (leading) || `company_id` || JOIN `contract` по `rest_id` наместо по `company_id` ||
     42
     43||= Индекс ||= Табела ||= Прва колона ||= Следни колони ||= Намена ||
     44|| `idx_contract_company_id_rest_id` || `contract` || `company_id` || `rest_id` || Пребарување договори по компанија и ресторан и групирање по компанија. ||
     45|| `idx_driver_rest_id` || `driver` || `rest_id` || — || Пронаоѓање доставувачи по ресторан. ||
     46|| `idx_contract_rest_id_company_id` || `contract` || `rest_id` || `company_id` || Пронаоѓање договори почнувајќи од ресторан. ||
     47|| `idx_lunch_time_contract_id` || `lunch_time` || `contract_id` || — || Пронаоѓање термини за конкретен договор, без услов за денот од неделата. ||
     48
     49Првата колона го определува вообичаениот почеток на пребарувањето со составен индекс. Присуството на други колони не значи дека индексот ги содржи сите податоци потребни за прегледот.
    3550
    3651== Верификација ==
     52
    3753{{{
    3854#!sql
    39 SELECT indexname, indexdef
     55SELECT tablename, indexname, indexdef
    4056FROM pg_indexes
    4157WHERE schemaname = 'kbnteam'
    4258  AND indexname IN (
    43       'idx_lunch_time_weekday_contract_id',
    44       'idx_driver_rest_id',
    45       'idx_contract_rest_id_company_id'
    46   );
     59    'idx_contract_company_id_rest_id',
     60    'idx_driver_rest_id',
     61    'idx_contract_rest_id_company_id',
     62    'idx_lunch_time_contract_id'
     63)
     64ORDER BY tablename, indexname;
    4765}}}
    4866
    49 == Напомена — `idx_contract_rest_id_company_id` наспрема `idx_contract_company_id_rest_id` ==
    50 ||= Индекс ||= Leading колона ||= Цел ||
    51 || `idx_contract_company_id_rest_id` || `company_id` || Прашалници и JOIN по компанија → ресторан (дефиниран во `v_contracts_revenue_index.sql`) ||
    52 || `idx_contract_rest_id_company_id` || `rest_id` || Прашалници и JOIN по ресторан → компанија (овој индекс) ||
     67Проверката ги прикажува имињата и дефинициите. IF NOT EXISTS спречува повторно креирање под исто име, но не проверува дали постојната дефиниција е еднаква на наведената.
    5368
    54 Двата постојат паралелно за да ги поддржат различните насоки на JOIN во различните прегледи.
     69== Влијание врз перформансите ==
     70
     71Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење.
     72
     73Индексите contract(company_id, rest_id) и contract(rest_id, company_id) имаат различни водечки колони. Првиот го поддржува пристапот по компанија, а вториот по ресторан. Индексот lunch_time(contract_id) не обезбедува исто пребарување како индекс што започнува со денот од неделата.
     74
     75== Тестирање на перформанси ==
     76
     77Тест прашалниците за овој преглед се наведени во [wiki:DriverLunchTimersView v_driver_lunch_timers].
     78
     79=== Резултати пред индексирање ===
     80
     81||= Прашалник ||= Execution Time (ms) ||= План / забелешки ||
     82|| Тест 1: по ден || ___ || ___ ||
     83|| Тест 2: по договор || ___ || ___ ||
     84|| Тест 3: по ресторан || ___ || ___ ||
     85
     86=== Резултати по индексирање ===
     87
     88||= Прашалник ||= Execution Time (ms) ||= План / забелешки ||
     89|| Тест 1: по ден || ___ || ___ ||
     90|| Тест 2: по договор || ___ || ___ ||
     91|| Тест 3: по ресторан || ___ || ___ ||