| Version 6 (modified by , 11 days ago) ( diff ) |
|---|
Индекси: v_customer_loyalty_full_v2_index
| Својство | Вредност |
|---|---|
| Шема | kbnteam
|
| Област | Лојалност на клиентите |
| Главен преглед | v_customer_loyalty_full_v2 |
Опис
Индексите го поддржуваат пристапот до податоците за лојалност на клиентите. Се поставуваат врз изворните табели и можат да се користат од повеќе прегледи.
customer_loyalty(user_id) има уникатен индекс. Индексот по клиент и датум не го содржи order_total, па пресметката на вкупната потрошувачка и натаму бара читање на износите.
DDL
CREATE INDEX IF NOT EXISTS idx_customer_order_customer_user_id_order_datetime ON kbnteam.customer_order (customer_user_id, order_datetime DESC); CREATE INDEX IF NOT EXISTS idx_customer_company_id ON kbnteam.customer (company_id);
Поддржани прегледи
| Индекс | Прегледи | Намена |
|---|---|---|
idx_customer_order_customer_user_id_order_datetime | v_customer_loyalty_full_v2, v_orders_full, v_reviews_full | Пронаоѓање нарачки по клиент; поддршка за пристап по датум во рамки на клиентот. |
idx_customer_company_id | v_customer_loyalty_full_v2, v_orders_full | Пронаоѓање клиенти по компанијата на која припаѓаат. |
Колонски план
| Индекс | Табела | Прва колона | Следни колони | Намена |
|---|---|---|---|---|
idx_customer_order_customer_user_id_order_datetime | customer_order | customer_user_id | order_datetime DESC | Пронаоѓање нарачки по клиент; поддршка за пристап по датум во рамки на клиентот. |
idx_customer_company_id | customer | company_id | — | Пронаоѓање клиенти по компанијата на која припаѓаат. |
Првата колона го определува вообичаениот почеток на пребарувањето со составен индекс. Присуството на други колони не значи дека индексот ги содржи сите податоци потребни за прегледот.
Верификација
SELECT tablename, indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'kbnteam'
AND indexname IN (
'idx_customer_order_customer_user_id_order_datetime',
'idx_customer_company_id'
)
ORDER BY tablename, indexname;
Проверката ги прикажува имињата и дефинициите. IF NOT EXISTS спречува повторно креирање под исто име, но не проверува дали постојната дефиниција е еднаква на наведената.
Влијание врз перформансите
Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење.
Редоследот по датум може да поддржи пристап до понови нарачки на клиентот, но не ја отстранува потребата од читање на нарачките за COUNT и SUM. Одделен CTE сам по себе не докажува подобри перформанси.
Тестирање на перформанси
Резултатите се однесуваат на v_customer_loyalty_full_v2 и неговата главна табела customer_loyalty.
SELECT
Времето на извршување на SELECT прашалникот е прифатливо за редовното користење на погледот. Постоечката индексна поддршка е доволна за тестираните прашалници.
INSERT и UPDATE
Тестирани се по еден INSERT и еден UPDATE врз kbnteam.customer_loyalty, главната табела на погледот. Се тестира додавање запис за лојалност и промена на поените.
| Операција | Execute (ms) | Fetch (ms) | Вратени редови |
|---|---|---|---|
| INSERT | 14 | 13 | 1 |
| UPDATE | 13 | 14 | 1 |
Execute е времето на извршување прикажано во DBeaver. Fetch вредностите се преземени од дополнетата евиденција на тестирањето. Ова се клиентски времиња, изразени во милисекунди.
Двете операции се успешни и враќаат по еден ред преку RETURNING. По мерењето промените се вратени со ROLLBACK.
INSERT и UPDATE се извршуваат со прифатлива брзина. Овие мерења ја опишуваат тестираната состојба на базата и не се споредба пред и по индексирање.
Резултатите се за целите прашалници, а не за одделниот придонес на секој индекс.
