Changes between Version 28 and Version 29 of OtherTopics


Ignore:
Timestamp:
06/24/26 02:26:11 (29 hours ago)
Author:
221181
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OtherTopics

    v28 v29  
    142142=== Сценарио 1: Тековен залиха по складиште ===
    143143
    144 Цел: Прикажува вкупниот број производи и вредност на залихата по складишта.
     144Цел: Прикажува вкупниот број производи и вредност на залихата по складишта.Прашањето врши агрегација (SUM) на целата табела.
    145145
    146146{{{
     
    157157}}}
    158158
    159 ==== 1.1. Без индекс ====
    160 
    161 Кога се поврзува табелата **warehouse_stock** со табелата **product** преку колоната **product_id** (JOIN), ако нема индекс, базата на податоци ќе ги скенира сите редови.
     159==== 1. Предложени индекси ====
     160
     161За да се забрза пребарувањето и поврзувањето, предложен е индекс на надворешниот клуч во табелата warehouse_stock:
     162{{{
     163CREATE INDEX idx_wh_stock_product_id ON stock_management.warehouse_stock(product_id);
     164}}}
     165
     166==== 2. Анализа пред креирање на индексот (Без индекс) ====
    162167
    163168{{{
     
    201206'''Времетраење: 103.080 ms'''
    202207
    203 '''Анализа:''' Многу бавно.
    204 
    205 ==== 1.2. Со индекс ====
    206 
    207 За пребарувањето по product_id во табелата warehouse_stock да биде побрзо
    208 
    209 '''Применет индекс:'''
    210 {{{
    211 CREATE INDEX idx_wh_stock_product_id ON stock_management.warehouse_stock(product_id);
    212 }}}
     208
     209==== 3. Анализа по креирање на индексот (Со индекс) ====
    213210
    214211{{{
     
    244241'''Времетраење: 29.767 ms '''
    245242
    246 '''Анализа:''' Многу по брзо.
     243==== 4. Дали индексот навистина се користи во планот за извршување? ====
     244Не. Доколку го анализираме планот за извршување (EXPLAIN PLAN) откако е креиран индексот, јасно се гледа дека PostgreSQL сè уште користи Seq Scan на warehouse_stock. Причината за ова е што барањето нема WHERE клаузула за филтрирање на специфични редови, тоа врши агрегација на сите податоци. За читање на 100% од редовите во една табела, Query Optimizer-от заклучува дека секвенцијалното скенирање е поефикасно од користењето на индекс.
     245
     246==== 5. Заклучок за перформансите ====
     247Иако времето на извршување се намали од ~103ms на ~29ms, ова не се должи на индексот. Ова е класичен пример за кеширање податоците биле вчитани во меморијата при првото извршување (shared hits), што го направило второто извршување побрзо. Индексот idx_wh_stock_product_id би бил корисен само доколку додадеме WHERE филтер за конкретен производ (на пр. WHERE ws.product_id = 5).
    247248
    248249=== Сценарио 2: Годишен извештај за продажба (последни 12 месеци) ===