Changes between Version 68 and Version 69 of QueryOptimization
- Timestamp:
- 05/17/26 13:58:12 (9 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
QueryOptimization
v68 v69 1324 1324 }}} 1325 1325 1326 ==== Без индекс: 1326 ==== 1. Примарен филтер: 1327 1328 Примарен филтер за овој поглед е `event_time > CURRENT_TIMESTAMP` во комбинација со `venue_id`. Корисниците најчесто сакаат да видат што се случува во нивниот град или во конкретен објект во блиска иднина. 1329 1330 ==== 2. Случај на употреба: 1331 1332 Овој поглед е „срцето“ на насловната страница. Секој пат кога корисникот ќе ја отвори апликацијата или ќе филтрира настани по локација, овој прашалник се извршува. Тука перформансите се клучни за корисничкото искуство - ако репертоарот се вчита побавно од 2 s, корисникот веројатно ќе ја напушти страницата. 1333 1334 ==== 3. Иницијално време: 1335 1336 Иницијалното време за извршување е многу ниско (0.193 ms), но забележливо е дека базата веќе користи постоечки уникатен индекс (`uq_happening_time_venue`). Проблемот тука не е брзината на еден прашалник, туку времето на планирање кое при комплексни филтри може да биде поголемо од самото извршување. 1337 1338 ==== 4. Анализа на планот на извршување (без индекси): 1339 1340 Базата користи '''Index Scan''' врз постоечко уникатно ограничување. 1341 1342 Сепак, при '''INSERT''' операцијата се појавува време од 573.660 ms, што е релативно високо за едноставно додавање на термин. Ова укажува на тоа дека базата троши време на проверка на интегритетот и пресметка на екстремните вредности ('''MAX'''). 1327 1343 1328 1344 * '''SELECT''' … … 1398 1414 Времето на извршување е релативно ниско, но базата троши 4.258 ms само на планирање на секој поединечен запис. Бидејќи редовите не се подредени по време, системот мора да врши постојани споредби за секој настан. Заради ова, потребен е индекс кој ќе овозможи моментално лоцирање на идните настани без пребарување на целата табела. 1399 1415 1400 ==== Оптимизација: 1416 ==== 5. Оптимизација и индексирање: 1417 1418 За да се овозможи максимална ефикасност при различни комбинации на филтрирање (само по време, само по локација или двете заедно), се предлагаат: 1419 1420 * `idx_event_happening_time`: За брзо хронолошко подредување. 1421 1422 * `idx_event_happening_venue_id`: За брзо филтрирање по објект. 1423 1424 * `idx_event_happening_venue_time`: Композитен индекс кој е идеален за прашалници кои бараат „претстојни настани во конкретна сала“. 1401 1425 1402 1426 {{{ … … 1413 1437 }}} 1414 1438 1415 ==== Со индекс: 1439 ==== 6. Резултат по оптимизација: 1440 1441 Времето на извршување останува стабилно ниско (0.215 ms). 1442 1443 Најголемото подобрување се гледа кај '''INSERT''' операцијата, каде времето се намали од 573 ms на 1.278 ms. Ова е клучно бидејќи администраторите често додаваат нови термини во пакети, па ова забрзување значително го олеснува нивниот процес. 1416 1444 1417 1445 * '''SELECT'''
