wiki:DriverLunchTimersIndex

Version 4 (modified by 223162, 11 days ago) ( diff )

--

Индекси: v_driver_lunch_timers_index

Својство Вредност
Шема kbnteam
Област Термини за ручек
Главен преглед v_driver_lunch_timers

Опис

Индексите го поддржуваат пристапот до податоците за термини за ручек. Се поставуваат врз изворните табели и можат да се користат од повеќе прегледи.

Водечката колона contract_id овозможува пристап до термините според договорот. Самостоен услов само по lunch_weekday нема соодветен дополнителен индекс во овој сет.

DDL

CREATE INDEX IF NOT EXISTS idx_driver_rest_id
ON kbnteam.driver (rest_id);

CREATE INDEX IF NOT EXISTS idx_contract_rest_id_company_id
ON kbnteam.contract (rest_id, company_id);

CREATE INDEX IF NOT EXISTS idx_lunch_time_contract_id
ON kbnteam.lunch_time (contract_id);

Поддржани прегледи

Индекс Прегледи Намена
idx_contract_company_id_rest_id v_contracts_revenue, v_company_billing_overview, v_driver_lunch_timers Пребарување договори по компанија и ресторан и групирање по компанија.
idx_driver_rest_id v_driver_lunch_timers, v_driver_deliveries Пронаоѓање доставувачи по ресторан.
idx_contract_rest_id_company_id v_driver_lunch_timers, v_contracts_revenue Пронаоѓање договори почнувајќи од ресторан.
idx_lunch_time_contract_id v_driver_lunch_timers Пронаоѓање термини за конкретен договор, без услов за денот од неделата.

Заеднички индекси

Индекс Поврзана документација
idx_contract_company_id_rest_id Индекси за договори и приходи

Колонски план

Индекс Табела Прва колона Следни колони Намена
idx_contract_company_id_rest_id contract company_id rest_id Пребарување договори по компанија и ресторан и групирање по компанија.
idx_driver_rest_id driver rest_id — Пронаоѓање доставувачи по ресторан.
idx_contract_rest_id_company_id contract rest_id company_id Пронаоѓање договори почнувајќи од ресторан.
idx_lunch_time_contract_id lunch_time contract_id — Пронаоѓање термини за конкретен договор, без услов за денот од неделата.

Првата колона го определува вообичаениот почеток на пребарувањето со составен индекс. Присуството на други колони не значи дека индексот ги содржи сите податоци потребни за прегледот.

Верификација

SELECT tablename, indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'kbnteam'
  AND indexname IN (
    'idx_contract_company_id_rest_id',
    'idx_driver_rest_id',
    'idx_contract_rest_id_company_id',
    'idx_lunch_time_contract_id'
)
ORDER BY tablename, indexname;

Проверката ги прикажува имињата и дефинициите. IF NOT EXISTS спречува повторно креирање под исто име, но не проверува дали постојната дефиниција е еднаква на наведената.

Влијание врз перформансите

Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење.

Индексите contract(company_id, rest_id) и contract(rest_id, company_id) имаат различни водечки колони. Првиот го поддржува пристапот по компанија, а вториот по ресторан. Индексот lunch_time(contract_id) не обезбедува исто пребарување како индекс што започнува со денот од неделата.

Тестирање на перформанси

„Пред индексирање“ и „по индексирање“ ги означуваат групите наведени како „без индекси“ и „со индекси“ во евиденцијата. Точниот сет присутни индекси во секоја група не е евидентиран; „без индекси“ не потврдува отсуство на индекси од примарни и уникатни клучеви.

Наведените времиња се клиентски мерења од DBeaver, а не серверските Planning Time и Execution Time од EXPLAIN ANALYZE. Нема приложени планови, типови на скенирање или податоци за баферите. Вредностите се во милисекунди (ms).

Прашалникот и дополнителното тестирање се опишани во v_driver_lunch_timers.

Измерен прашалник

SELECT * FROM kbnteam.v_driver_lunch_timers
WHERE contract_id = 100 AND lunch_weekday = 'Monday'
ORDER BY lunch_start;

Резултати пред индексирање

Метрика Измерен резултат
Клиентско време (ms) 57
Приказ на мерењето Време прикажано со резултатот во DBeaver
Прикажани / преземени редови 18
Planning Time / Execution Time од EXPLAIN Не се измерени
План, тип на скенирање и бафери Не се приложени

Резултати по индексирање

Метрика Измерен резултат
Клиентско време (ms) 337
Приказ на мерењето Време прикажано со резултатот во DBeaver
Прикажани / преземени редови 18
Planning Time / Execution Time од EXPLAIN Не се измерени
План, тип на скенирање и бафери Не се приложени

Анализа на резултатите

Метрика Пред По Промена на времето
Клиентско време (ms) 57 337 +491,2%

Времето е подолго за 280 ms (491,2%), приближно 5,9 пати. Измерениот прашалник комбинира договор и ден и ги сортира резултатите по lunch_start. Причината за влошувањето не е утврдена; без план не може да се припише на конкретен индекс или сортирање.

Промената се пресметува како 100 × (време по - време пред) / време пред. Негативна вредност значи пократко време, а позитивна подолго време. Процентот ја опишува разликата меѓу прикажаните вредности.

Ова се поединечни набљудувања. Не се евидентирани контролирани повторувања, исти услови за кеширање и оптоварување или точните дефиниции на присутните индекси. Затоа промената на времето не е доказ дека индексите се единствената причина. Не се приложени мерења за INSERT, UPDATE и DELETE.

Измерената разлика се однесува на целиот прашалник и двете означени состојби. Не е измерен одделниот придонес на секој индекс наведен на оваа страница.

Note: See TracWiki for help on using the wiki.