| 115 | | Примерите користат илустративни идентификатори и датуми. За споредливи мерења се избираат вредности што постојат во базата и се задржуваат истите податоци, филтри, услови за кеширање и број на повторувања. Статистиките за табелите треба да бидат ажурирани во двете состојби. |
| 116 | | |
| 117 | | === Тест прашалници === |
| 118 | | |
| 119 | | {{{ |
| 120 | | #!sql |
| 121 | | BEGIN READ ONLY; |
| 122 | | SET LOCAL statement_timeout = '60s'; |
| 123 | | |
| 124 | | -- Тест 1: по клиент и датум |
| 125 | | EXPLAIN (ANALYZE, BUFFERS, VERBOSE) |
| | 115 | Мерењата се евидентирани во DBeaver на 14 септември 2026 година. „Пред индексирање“ и „по индексирање“ ги означуваат групите наведени како „без индекси“ и „со индекси“ во евиденцијата. Точниот сет присутни индекси во секоја група не е евидентиран; „без индекси“ не потврдува отсуство на индекси од примарни и уникатни клучеви. |
| | 116 | |
| | 117 | Наведените времиња се клиентски мерења од DBeaver, а не серверските Planning Time и Execution Time од EXPLAIN ANALYZE. Нема приложени планови, типови на скенирање или податоци за баферите. Вредностите се во милисекунди (ms). |
| | 118 | |
| | 119 | === Измерен прашалник === |
| | 120 | |
| | 121 | {{{ |
| | 122 | #!sql |
| 127 | | WHERE customer_user_id = 1 |
| 128 | | AND order_datetime >= DATE '2026-09-01' |
| 129 | | AND order_datetime < DATE '2026-10-01'; |
| 130 | | |
| 131 | | -- Тест 2: по компаниска нарачка |
| 132 | | EXPLAIN (ANALYZE, BUFFERS, VERBOSE) |
| 133 | | SELECT * FROM kbnteam.v_orders_full |
| 134 | | WHERE comp_order_id = 1; |
| 135 | | |
| 136 | | -- Тест 3: по компанија |
| 137 | | EXPLAIN (ANALYZE, BUFFERS, VERBOSE) |
| 138 | | SELECT * FROM kbnteam.v_orders_full |
| 139 | | WHERE order_company_id = 1; |
| 140 | | |
| 141 | | ROLLBACK; |
| 142 | | }}} |
| 143 | | |
| 144 | | Индексот по клиент и датум е наменет за пристап во рамки на конкретен клиент. Самостоен услов по датум нема ист начин на пристап како услов што ја задава и водечката колона customer_user_id. |
| | 124 | WHERE customer_user_id = 1202947 AND order_total >= 40; |
| | 125 | }}} |
| 148 | | Основната состојба ги задржува индексите на примарните клучеви и уникатните ограничувања. Останатите присутни индекси се евидентираат одделно. При споредба на заеднички индекси се користи истата почетна состојба за секој преглед. |
| 149 | | |
| 150 | | ||= Метрика ||= Тест 1 (по клиент и датум) ||= Тест 2 (по компаниска нарачка) ||= Тест 3 (по компанија) || |
| 151 | | || Planning Time || ___ ms || ___ ms || ___ ms || |
| 152 | | || Execution Time || ___ ms || ___ ms || ___ ms || |
| 153 | | || Rows Returned || ___ || ___ || ___ || |
| 154 | | || Начин на читање по табела || ___ || ___ || ___ || |
| 155 | | || Shared Hit Blocks || ___ || ___ || ___ || |
| 156 | | || Shared Read Blocks || ___ || ___ || ___ || |
| 157 | | |
| 158 | | {{{ |
| 159 | | -- Планови и резултати пред дополнителното индексирање: |
| 160 | | |
| 161 | | }}} |
| | 129 | ||= Метрика ||= Измерен резултат || |
| | 130 | || Клиентско време (ms) || 2598 || |
| | 131 | || Приказ на мерењето || Време прикажано со резултатот во DBeaver || |
| | 132 | || Прикажани / преземени редови || 1 || |
| | 133 | || Planning Time / Execution Time од EXPLAIN || Не се измерени || |
| | 134 | || План, тип на скенирање и бафери || Не се приложени || |
| 221 | | Мерењето ги користи истите тест прашалници и услови како почетното мерење. |
| 222 | | |
| 223 | | ||= Метрика ||= Тест 1 (по клиент и датум) ||= Тест 2 (по компаниска нарачка) ||= Тест 3 (по компанија) || |
| 224 | | || Planning Time || ___ ms || ___ ms || ___ ms || |
| 225 | | || Execution Time || ___ ms || ___ ms || ___ ms || |
| 226 | | || Rows Returned || ___ || ___ || ___ || |
| 227 | | || Начин на читање по табела || ___ || ___ || ___ || |
| 228 | | || Shared Hit Blocks || ___ || ___ || ___ || |
| 229 | | || Shared Read Blocks || ___ || ___ || ___ || |
| 230 | | |
| 231 | | {{{ |
| 232 | | -- Планови и резултати по дополнителното индексирање: |
| 233 | | |
| 234 | | }}} |
| 235 | | |
| 236 | | === Анализа на подобрување === |
| 237 | | |
| 238 | | ||= Метрика ||= Пред ||= По ||= Промена (%) || |
| 239 | | || Execution Time (Тест 1) || ___ ms || ___ ms || ___ % || |
| 240 | | || Execution Time (Тест 2) || ___ ms || ___ ms || ___ % || |
| 241 | | || Execution Time (Тест 3) || ___ ms || ___ ms || ___ % || |
| 242 | | |
| 243 | | Промената се пресметува како 100 × (време пред − време по) / време пред, кога почетното време е поголемо од нула. Негативна вредност означува побавно извршување. |
| 244 | | |
| 245 | | Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење. |
| | 194 | ||= Метрика ||= Измерен резултат || |
| | 195 | || Клиентско време (ms) || 2591 || |
| | 196 | || Приказ на мерењето || Време прикажано со резултатот во DBeaver || |
| | 197 | || Прикажани / преземени редови || 1 || |
| | 198 | || Planning Time / Execution Time од EXPLAIN || Не се измерени || |
| | 199 | || План, тип на скенирање и бафери || Не се приложени || |
| | 200 | |
| | 201 | === Анализа на резултатите === |
| | 202 | |
| | 203 | ||= Метрика ||= Пред ||= По ||= Промена на времето || |
| | 204 | || Клиентско време (ms) || 2598 || 2591 || -0,3% || |
| | 205 | |
| | 206 | Времето е пократко само за 7 ms (0,3%). Едно вакво мерење не покажува значајно практично забрзување. Измерениот услов е по клиент и минимален износ, без датумски опсег. |
| | 207 | |
| | 208 | Промената се пресметува како 100 × (време по - време пред) / време пред. Негативна вредност значи пократко време, а позитивна подолго време. Процентот ја опишува разликата меѓу прикажаните вредности. |
| | 209 | |
| | 210 | Ова се поединечни набљудувања. Не се евидентирани контролирани повторувања, исти услови за кеширање и оптоварување или точните дефиниции на присутните индекси. Затоа промената на времето не е доказ дека индексите се единствената причина. Не се приложени мерења за INSERT, UPDATE и DELETE. |
| | 211 | |
| | 212 | === Дополнително тестирање - сè уште неизмерено === |
| | 213 | |
| | 214 | Следниот прашалник служи за ново мерење на серверскиот план со истиот филтер. Неговите резултати не се пополнети со клиентските времиња наведени погоре. За споредба се задржуваат исти податоци и поставки, се евидентираат присутните индекси, се ажурираат статистиките и се прават повеќе повторувања во двете состојби. Се споредуваат медијаната на времињата и плановите. |
| | 215 | |
| | 216 | {{{ |
| | 217 | #!sql |
| | 218 | BEGIN READ ONLY; |
| | 219 | SET LOCAL statement_timeout = '60s'; |
| | 220 | |
| | 221 | EXPLAIN (ANALYZE, BUFFERS, VERBOSE) |
| | 222 | SELECT * FROM kbnteam.v_orders_full |
| | 223 | WHERE customer_user_id = 1202947 AND order_total >= 40; |
| | 224 | |
| | 225 | ROLLBACK; |
| | 226 | }}} |
| | 227 | |
| | 228 | ||= Метрика за дополнителното тестирање ||= Пред ||= По || |
| | 229 | || Planning Time (ms) || Не е измерено || Не е измерено || |
| | 230 | || Execution Time (ms) || Не е измерено || Не е измерено || |
| | 231 | || Тип на скенирање по табела || Не е евидентиран || Не е евидентиран || |
| | 232 | || Shared Hit Blocks / Shared Read Blocks || Не се измерени || Не се измерени || |