Changes between Version 95 and Version 96 of QueryOptimization


Ignore:
Timestamp:
07/01/26 00:01:06 (5 days ago)
Author:
231027
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v95 v96  
    881881== Анализа и оптимизација на `Event_Overall_Ratings`
    882882
    883 Овој материјализиран поглед врши брза статистичка анализа на задоволството на публиката преку пресметување на просечната оцена за секој настан поединечно. Со оглед на тоа што користи агрегациски функции ('''COUNT''' и '''AVG'''), тој е зачуван како материјализиран поглед со цел да се избегне постојано пресметување и да се зачуваат перформансите на базата.
     883Овој материјализиран поглед врши агрегациска анализа на задоволството на публиката. Со пресметување на просечните оценки ('''AVG''') и бројот на рецензии ('''COUNT''') по настан, тој обезбедува клучни перформанс индикатори (KPIs) за организаторите. Материјализирањето е избрано за да се обезбеди висока брзина на вчитување при прикажување на статистички извештаи, избегнувајќи комплексни пресметки при секој прашалник.
    884884
    885885{{{
    886886
    887887CREATE MATERIALIZED VIEW "Event_Overall_Ratings" AS
    888 SELECT
    889     e.event_id,
    890     e.name AS event_name,
    891     eh.event_happening_id,
    892     eh.event_time,
    893     COUNT(ehr.rating_id) AS total_reviews,
    894     COALESCE(ROUND(AVG(ehr.rating), 2), 0.00) AS average_rating
     888SELECT e.event_id, e.name AS event_name, eh.event_happening_id, eh.event_time,
     889       COUNT(ehr.rating_id) AS total_reviews, COALESCE(ROUND(AVG(ehr.rating), 2), 0.00) AS average_rating
    895890FROM "Event" e
    896 JOIN "Event_Happening" eh ON e.event_id = eh.event_id
    897 LEFT JOIN "Event_Happening_Rating" ehr ON eh.event_happening_id = ehr.event_happening_id
     891    JOIN "Event_Happening" eh ON e.event_id = eh.event_id
     892    LEFT JOIN "Event_Happening_Rating" ehr ON eh.event_happening_id = ehr.event_happening_id
     893WHERE e.is_active = TRUE
    898894GROUP BY e.event_id, e.name, eh.event_happening_id, eh.event_time;
    899895
    900896}}}
    901897
    902 Погледот е веќе најоптимално напишан и не треба да се преуредува.
     898Погледот е веќе најоптимално напишан со користење на постоечките уникатни констреинти и не бара дополнителни модификации.
    903899
    904900==== 1. Примарен филтер:
     
    922918== Анализа и оптимизација на `User_Order_History`
    923919
    924 Овој материјализиран поглед генерира финансиски профил и историја на нарачки за секој корисник, сумирајќи ги направените трошоци на ниво на главна нарачка. Тој нуди брз увид во точниот број на купени ставки, бројот на рефундирани билети како и вкупната сума на вратени пари по нарачка без оптоварување на трансакциските табели.
     920Овој поглед генерира финансиски профил за секој корисник, сумирајќи ги направените нарачки и повратните средства. Оптимизиран е за сметководствени цели, нудејќи јасен увид во обемот на купени и рефундирани ставки. Материјализираната природа на погледот значително го растеретува серверот при генерирање на кориснички „Dashboard“ извештаи.
    925921
    926922{{{
    927923
    928924CREATE MATERIALIZED VIEW "User_Order_History" AS
    929 SELECT u.user_id,
    930        u.username,
    931        o.order_id,
    932        o.order_time,
    933        o.order_amount,
     925SELECT u.user_id, u.username, o.order_id, o.order_time, o.order_amount,
    934926       COALESCE(items.total_items_ordered, 0) AS total_items_ordered,
    935927       COALESCE(items.total_items_refunded, 0) AS total_items_refunded,
    936928       COALESCE(items.total_amount_refunded, 0.00) AS total_amount_refunded
    937929FROM "User" u
    938 JOIN "Regular_User" ru ON u.user_id = ru.user_id
    939 JOIN "Ticket_Order" o ON ru.user_id = o.user_id
    940 LEFT JOIN (
    941     SELECT
    942         toi.order_id,
    943         COUNT(toi.order_item_id) AS total_items_ordered,
    944         COUNT(tri.refund_item_id) AS total_items_refunded,
    945         SUM(COALESCE(tri.item_price, 0.00)) AS total_amount_refunded
    946     FROM "Ticket_Order_Item" toi
    947     LEFT JOIN "Ticket_Refund_Item" tri ON toi.order_item_id = tri.order_item_id
    948     GROUP BY toi.order_id
    949 ) items ON o.order_id = items.order_id;
    950 
    951 }}}
    952 
    953 Погледот е веќе најоптимално напишан и не треба да се преуредува.
     930    JOIN "Regular_User" ru ON u.user_id = ru.user_id
     931    JOIN "Ticket_Order" o ON ru.user_id = o.user_id
     932    LEFT JOIN (
     933        SELECT toi.order_id, COUNT(toi.order_item_id) AS total_items_ordered,
     934               COUNT(tri.refund_item_id) AS total_items_refunded,
     935               SUM(COALESCE(tri.item_price, 0.00)) AS total_amount_refunded
     936        FROM "Ticket_Order_Item" toi
     937        LEFT JOIN "Ticket_Refund_Item" tri ON toi.order_item_id = tri.order_item_id
     938        GROUP BY toi.order_id
     939    ) items ON o.order_id = items.order_id
     940WHERE u.is_active = TRUE;
     941
     942}}}
     943
     944Погледот е веќе најоптимално напишан со користење на постоечките уникатни констреинти и не бара дополнителни модификации.
    954945
    955946==== 1. Примарен филтер:
     
    973964== Анализа и оптимизација на `Venue_Occupancy_Report`
    974965
    975 Овој комплексен аналитички поглед ја мери успешноста на продажбата преку споредба на бројот на продадени карти со максималниот капацитет на седишта во салата. Крајниот резултат дава прецизен процент на пополнетост за секој термин на настан, што е клучен бизнис индикатор за менаџерите и организаторите.
     966Овој аналитички поглед го мери „ефектот на продажба“ преку пресметка на процентот на пополнетост (`occupancy_percentage`) на секој термин. Тој е примарна алатка за менаџерите кои треба да го следат успехот на настанот во реално време. Имплементиран е како материјализиран поглед за да поддржи брзо аналитичко известување без дополнително оптоварување на базата со тешки '''JOIN''' операции врз табелите за нарачки.
    976967
    977968{{{
    978969
    979970CREATE MATERIALIZED VIEW "Venue_Occupancy_Report" AS
    980 SELECT e.event_id,
    981        e.name AS event_name,
    982        eh.event_happening_id,
    983        eh.event_time,
    984        v.name AS venue_name,
    985        v.number_of_seats AS total_venue_capacity,
    986        COALESCE(stats.sold_count, 0) AS tickets_sold,
     971SELECT e.event_id, e.name AS event_name, eh.event_happening_id, eh.event_time, v.name AS venue_name,
     972       v.number_of_seats AS total_venue_capacity, COALESCE(stats.sold_count, 0) AS tickets_sold,
    987973       ROUND((COALESCE(stats.sold_count, 0)::NUMERIC / v.number_of_seats::NUMERIC) * 100, 2) AS occupancy_percentage
    988974FROM "Event" e
    989 JOIN "Event_Happening" eh ON e.event_id = eh.event_id
    990 JOIN "Venue" v ON eh.venue_id = v.venue_id
    991 LEFT JOIN (
    992     SELECT t.event_happening_id, COUNT(toi.order_item_id) AS sold_count
    993     FROM "Ticket_Order_Item" toi
    994     JOIN "Ticket" t ON toi.ticket_id = t.ticket_id
    995     GROUP BY t.event_happening_id
    996 ) stats ON eh.event_happening_id = stats.event_happening_id
     975    JOIN "Event_Happening" eh ON e.event_id = eh.event_id
     976    JOIN "Venue" v ON eh.venue_id = v.venue_id
     977    LEFT JOIN (
     978        SELECT t.event_happening_id, COUNT(toi.order_item_id) AS sold_count
     979        FROM "Ticket_Order_Item" toi
     980        JOIN "Ticket" t ON toi.ticket_id = t.ticket_id
     981        GROUP BY t.event_happening_id
     982    ) stats ON eh.event_happening_id = stats.event_happening_id
     983WHERE e.is_active = TRUE
    997984GROUP BY e.event_id, e.name, eh.event_happening_id, eh.event_time, v.name, v.number_of_seats, stats.sold_count;
    998985
    999986}}}
    1000987
    1001 Погледот е веќе најоптимално напишан и не треба да се преуредува.
     988Погледот е веќе најоптимално напишан со користење на постоечките уникатни констреинти и не бара дополнителни модификации.
    1002989
    1003990==== 1. Примарен филтер: