Changes between Version 68 and Version 69 of QueryOptimization


Ignore:
Timestamp:
05/17/26 13:58:12 (9 days ago)
Author:
231027
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v68 v69  
    13241324}}}
    13251325
    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''').
    13271343
    13281344 * '''SELECT'''
     
    13981414Времето на извршување е релативно ниско, но базата троши 4.258 ms само на планирање на секој поединечен запис. Бидејќи редовите не се подредени по време, системот мора да врши постојани споредби за секој настан. Заради ова, потребен е индекс кој ќе овозможи моментално лоцирање на идните настани без пребарување на целата табела.
    13991415
    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`: Композитен индекс кој е идеален за прашалници кои бараат „претстојни настани во конкретна сала“.
    14011425
    14021426{{{
     
    14131437}}}
    14141438
    1415 ==== Со индекс:
     1439==== 6. Резултат по оптимизација:
     1440
     1441Времето на извршување останува стабилно ниско (0.215 ms).
     1442
     1443Најголемото подобрување се гледа кај '''INSERT''' операцијата, каде времето се намали од 573 ms на 1.278 ms. Ова е клучно бидејќи администраторите често додаваат нови термини во пакети, па ова забрзување значително го олеснува нивниот процес.
    14161444
    14171445 * '''SELECT'''