| Version 2 (modified by , 2 weeks 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) не обезбедува исто пребарување како индекс што започнува со денот од неделата.
Тестирање на перформанси
Тест прашалниците за овој преглед се наведени во v_driver_lunch_timers.
Резултати пред индексирање
| Прашалник | Execution Time (ms) | План / забелешки |
|---|---|---|
| Тест 1: по ден | _ | _ |
| Тест 2: по договор | _ | _ |
| Тест 3: по ресторан | _ | _ |
Резултати по индексирање
| Прашалник | Execution Time (ms) | План / забелешки |
|---|---|---|
| Тест 1: по ден | _ | _ |
| Тест 2: по договор | _ | _ |
| Тест 3: по ресторан | _ | _ |
