| 208 | | CREATE INDEX idx_po_status_pending ON purchase_order(expected_delivery_date) WHERE status = 'Pending'; |
| 209 | | }}} |
| 210 | | |
| 211 | | ==== 1.3. Со индекс ==== |
| 212 | | |
| 213 | | '''Метод''': Index Scan. |
| 214 | | |
| 215 | | '''Времетраење: 94.976 ms ''' |
| | 211 | CREATE INDEX idx_wh_stock_product_id ON stock_management.warehouse_stock(product_id); |
| | 212 | }}} |
| | 213 | |
| | 214 | {{{ |
| | 215 | "HashAggregate (cost=705.70..706.95 rows=100 width=262) (actual time=29.541..29.548 rows=3.00 loops=1)" |
| | 216 | " Group Key: w.warehouse_id" |
| | 217 | " Batches: 1 Memory Usage: 32kB" |
| | 218 | " Buffers: shared hit=164" |
| | 219 | " -> Hash Join (cost=191.75..518.20 rows=15000 width=232) (actual time=2.793..18.549 rows=15000.00 loops=1)" |
| | 220 | " Hash Cond: (ws.product_id = p.product_id)" |
| | 221 | " Buffers: shared hit=164" |
| | 222 | " -> Hash Join (cost=12.25..299.29 rows=15000 width=230) (actual time=0.060..9.059 rows=15000.00 loops=1)" |
| | 223 | " Hash Cond: (ws.warehouse_id = w.warehouse_id)" |
| | 224 | " Buffers: shared hit=97" |
| | 225 | " -> Seq Scan on warehouse_stock ws (cost=0.00..246.00 rows=15000 width=12) (actual time=0.025..1.711 rows=15000.00 loops=1)" |
| | 226 | " Buffers: shared hit=96" |
| | 227 | " -> Hash (cost=11.00..11.00 rows=100 width=222) (actual time=0.019..0.021 rows=3.00 loops=1)" |
| | 228 | " Buckets: 1024 Batches: 1 Memory Usage: 9kB" |
| | 229 | " Buffers: shared hit=1" |
| | 230 | " -> Seq Scan on warehouse w (cost=0.00..11.00 rows=100 width=222) (actual time=0.011..0.013 rows=3.00 loops=1)" |
| | 231 | " Buffers: shared hit=1" |
| | 232 | " -> Hash (cost=117.00..117.00 rows=5000 width=10) (actual time=2.710..2.710 rows=5000.00 loops=1)" |
| | 233 | " Buckets: 8192 Batches: 1 Memory Usage: 279kB" |
| | 234 | " Buffers: shared hit=67" |
| | 235 | " -> Seq Scan on product p (cost=0.00..117.00 rows=5000 width=10) (actual time=0.010..1.133 rows=5000.00 loops=1)" |
| | 236 | " Buffers: shared hit=67" |
| | 237 | "Planning:" |
| | 238 | " Buffers: shared hit=12" |
| | 239 | "Planning Time: 0.761 ms" |
| | 240 | "Execution Time: 29.767 ms" |
| | 241 | }}} |
| | 242 | |
| | 243 | |
| | 244 | '''Времетраење: 29.767 ms ''' |
| 218 | | |
| 219 | | [[Image(with_index_1.png, 800px)]] |
| 220 | | |
| 221 | | === Сценарио 2: Пребарување на производи === |
| 222 | | |
| 223 | | Цел: Корисникот да може да пребарува производи според името (на пример: производи што започнуваат со "Laptop"). |
| 224 | | |
| 225 | | {{{ |
| 226 | | SELECT * FROM product WHERE name LIKE 'Laptop%'; |
| 227 | | EXPLAIN ANALYZE SELECT * FROM product WHERE name LIKE 'Laptop%'; |
| 228 | | }}} |
| 229 | | |
| 230 | | ==== 2.1. Без индекс ==== |
| 231 | | |
| 232 | | '''Метод''': Seq Scan. Сите 100.000 редови со производи се проверени еден по еден со споредба на текст. |
| 233 | | |
| 234 | | '''Времетраење: 142.270 ms''' |
| 235 | | |
| 236 | | '''Анализа:''' Многу бавно. |
| 237 | | |
| 238 | | [[Image(without_index_2.png, 800px)]] |
| 239 | | |
| 240 | | ==== 2.2. Стратегија за индексирање (Partial Index) ==== |
| 241 | | |
| 242 | | За да се забрзаат текстуалните пребарувања, е применет B-Tree индекс на колоната '''name'''. |
| 243 | | Параметарот text_pattern_ops овозможува LIKE барањата да можат да го користат индексот. |
| 244 | | |
| 245 | | '''Применет индекс:''' |
| 246 | | {{{ |
| 247 | | CREATE INDEX idx_product_name ON product(name text_pattern_ops); |
| 248 | | }}} |
| 249 | | |
| 250 | | ==== 2.3. Со индекс ==== |
| 251 | | |
| 252 | | |
| 253 | | '''Метод''': Index Scan. |
| 254 | | |
| 255 | | '''Времетраење: 0.470 ms ''' |
| 256 | | |
| 257 | | '''Анализа:''' Многу по брзо. |
| 258 | | |
| 259 | | [[Image(with_index_2.png, 800px)]] |