Оптимизација на прашалници и погледи
1. Анализа на поглед 1: Активен каталог на производи (v_active_product_catalog)
- Примарен филтер: Примарниот филтер за овој поглед е според
variant_idна производот (варијантата). - Случај на употреба: Се користи за брзо пребарување на производи и приказ на нивните варијанти во реално време на почетната продавница (Catalog Listing). Перформансите се критични бидејќи ова е најчесто повикуваниот поглед од корисниците.
Тест прашалникот кој се извршува е следниот:
SET search_path TO myschema; SELECT * FROM v_active_product_catalog WHERE variant_id = 234;
А. Состојба ПРЕД индексирање
- Време на извршување на прашалникот (Без индекси): 1 s 194 ms (Execution: 445 ms, Fetching: 749 ms)
- Најбавни операции (Bottleneck Analysis):
Од визуелниот план во DataGrip, идентификувано е дека базата троши најмногу време на:
Access Subquery Scan— поради потребата да се пресмета агрегацијатаSUM(ii.quantity)од табелатаinventory_itemsбез соодветна поддршка за брзо филтрирање во подпрашалникот.Unknown (Incremental Sort)— етапно сортирање во RAM меморијата за да се подредат податоците за потребите наGROUP BYклаузулата.
- Време на операциите INSERT и UPDATE (Без индекси): Со цел да се измери иницијалната брзина на запишување пред модификациите, извршени се следните трансакции:
- INSERT: 12 ms (Вкупно со fetching: 387 ms)
BEGIN; EXPLAIN (ANALYZE, BUFFERS) INSERT INTO inventory_items (variant_id, warehouse_id, quantity) VALUES (12, 50, 152); ROLLBACK;
- UPDATE: 13 ms (Вкупно со fetching: 393 ms)
BEGIN; EXPLAIN (ANALYZE, BUFFERS) UPDATE inventory_items SET quantity = 19 WHERE variant_id = 504; ROLLBACK;
Б. Воведување на индекси
За елиминирање на скенирањата на цели подпрашалници и мемориското сортирање, воведени се следните 1-2 карактеристични индекси на надворешните клучеви:
CREATE INDEX idx_v1_products_category_id ON products(category_id, product_id); CREATE INDEX idx_v1_inventory_items_variant_id ON inventory_items(variant_id); ANALYZE products; ANALYZE inventory_items;
В. Состојба ПОСЛЕ индексирање
- Ново време на извршување на прашалникот (Со индекси): [18ms] *(Времето е драстично намалено во рамките на прифатливото оперативни време под 2 секунди).*
- Најбавни операции сега:
Скапите операции
Access Subquery Scanи меморискиотIncremental Sortцелосно исчезнуваат. Базата сега ги извршува операциите преку директен, инстантен Index Scan користејќи ја однапред подредената B-Tree структура.
- Ново време на операциите INSERT и UPDATE (Со индекси):
- INSERT: 26 ms
- UPDATE: 38 ms
Заклучок за Write-Impact: Иако времето за запишување се зголеми (од 12ms на 26ms за внесување и од 13ms на 38ms за ажурирање) поради потребата од дополнително запишување во самите индексни табели, ова зголемување е во рамки на милисекунди и е целосно прифатливо. Придобивката од забрзувањето на главниот
SELECTпрашалник го оправдува овој минимален трошок.
Last modified
8 days ago
Last modified on 05/18/26 01:34:08
Attachments (9)
- view1_1.png (35.2 KB ) - added by 8 days ago.
- view1_2.png (64.0 KB ) - added by 8 days ago.
- view1_3.png (30.3 KB ) - added by 8 days ago.
- view1_4.png (35.1 KB ) - added by 8 days ago.
- view1_5.png (35.9 KB ) - added by 8 days ago.
- view1_6.png (30.8 KB ) - added by 8 days ago.
- view1_7.png (68.6 KB ) - added by 8 days ago.
- view1_8.png (32.2 KB ) - added by 8 days ago.
- view1_9.png (32.8 KB ) - added by 8 days ago.
Download all attachments as: .zip
Note:
See TracWiki
for help on using the wiki.
