Changes between Version 66 and Version 67 of QueryOptimization
- Timestamp:
- 05/17/26 13:47:06 (10 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
QueryOptimization
v66 v67 863 863 }}} 864 864 865 ==== Без индекс: 865 ==== 1. Примарен филтер: 866 867 Примарен филтер за овој поглед е `event_id`. Најчесто пребаруваме сумарна статистика за еден конкретен настан за да ги прикажеме ѕвездичките (рејтингот) на неговата насловна страна. 868 869 ==== 2. Случај на употреба: 870 871 Овој поглед е клучен за почетната страна на апликацијата и пребарувањето на настани. Корисниците често ги филтрираат настаните според нивната популарност и просечна оценка. Бидејќи овие податоци се агрегираат ('''COUNT''' и '''AVG''') од илјадници рецензии, пресметката може да стане тешка операција. 872 873 ==== 3. Иницијално време: 874 875 Иницијалното време за извршување е 1.029 s (1029 ms). Ова е на самата граница на прифатливост. Ако имаме илјадници настани со милиони рецензии, ова време би пораснало експоненцијално. 876 877 ==== 4. Анализа на планот на извршување (без индекси): 878 879 Базата троши најмногу време на '''Bitmap Heap Scan''' врз `Event_Happening` и '''Index Scan''' врз рецензиите за да ги собере сите потребни редови за агрегација. 880 881 Потоа користи '''GroupAggregate''' операција која мора да ги процесира сите вчитани редови за да ги пресмета просекот и вкупниот број. 866 882 867 883 * '''SELECT''' … … 938 954 Пресметката на просечни оценки бара постојано агрегирање на податоци, што е бавно при секој нов приказ. Композитен индекс на (`event_happening_id`, `rating`) овозможува математичките операции да се вршат директно врз индексот, забрзувајќи го приказот на почетната страна. 939 955 940 ==== Оптимизација: 956 ==== 5. Оптимизација и индексирање: 957 958 За да се забрза пресметката, воведуваме композитен индекс: 959 960 * idx_ehr_happening_id_rating: Овој индекс ги содржи и `event_happening_id` и самата оценка (rating). Ова овозможува базата да ги пресмета '''AVG''' и '''COUNT''' директно од структурата на индексот, без да мора да ги чита редовите од самата табела. 941 961 942 962 {{{ … … 947 967 }}} 948 968 949 ==== Со индекс: 969 ==== 6. Резултат по оптимизација: 970 971 Времето на извршување се намали на 0.459 ms. 972 973 Подобрување: Забрзување од над 2200 пати. 974 975 Операциите за внесување и ажурирање остануваат под 1 ms, што значи дека композитниот индекс не додава голем товар при запишување. 950 976 951 977 * '''SELECT'''
