Changes between Version 7 and Version 8 of QueryOptimization


Ignore:
Timestamp:
06/11/26 13:18:08 (8 days ago)
Author:
231018
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v7 v8  
    11== Индексирање и оптимизација ==
    2 {{{
    3 CREATE INDEX idx_zalba_status
    4 ON Zalba(status);
     2
     3{{{
     4CREATE INDEX idx_zalba_status_zalba_id
     5ON Zalba(status_zalba_id);
     6
     7CREATE INDEX idx_status_zalba_ime
     8ON StatusZalba(ime);
    59
    610CREATE INDEX idx_zalba_korisnik_id
     
    1317ON Prekrsok_Storitel(storitel_embg);
    1418
    15 CREATE INDEX idx_kazna_status
    16 ON Kazna(status);
     19CREATE INDEX idx_kazna_status_kazna_id
     20ON Kazna(status_kazna_id);
     21
     22CREATE INDEX idx_status_kazna_ime
     23ON StatusKazna(ime);
    1724
    1825CREATE INDEX idx_prekrsok_datum
     
    2027}}}
    2128
    22 
    2329Со цел да се подобрат перформансите на системот и да се намали времето на извршување на погледите и прашалниците, се креирани индекси на колони кои најчесто се користат при филтрирање на податоци, поврзување на табели преку JOIN операции и пребарување според одредени критериуми.
    2430
    25 Избраните индекси се поставени на колони кои имаат значајна улога во функционирањето на системот, како што се статуси на жалби и казни, идентификатори за поврзување на табели и датуми на прекршоци. Со нивна помош базата на податоци може побрзо да ги пронајде потребните записи без да врши целосно скенирање на табелите, што е особено важно при работа со голем број податоци.
    26 
    27 Индексот idx_zalba_status овозможува побрзо филтрирање на жалбите според нивниот статус, додека индексите idx_zalba_korisnik_id и idx_zalba_prekrsok_id ја подобруваат ефикасноста на JOIN операциите помеѓу табелите Zalba, Korisnik и Prekrsok.
    28 
    29 Дополнително, индексот idx_prekrsok_storitel_embg го забрзува пребарувањето на прекршоци според сторителот, што е корисно при генерирање статистички извештаи за граѓаните со најголем број прекршоци.
    30 
    31 За финансиските анализи и следење на казните е имплементиран индексот idx_kazna_status, кој овозможува побрзо издвојување на платени и неплатени казни. Дополнително, индексот idx_prekrsok_datum го подобрува пребарувањето на прекршоците според датум и овозможува поефикасно генерирање на дневни, неделни и месечни извештаи.
     31Бидејќи статусите во моделот се нормализирани и издвоени во посебни табели, индексите не се поставуваат директно на текстуална колона `status`, туку на foreign key колоните преку кои главните табели се поврзуваат со статус табелите. Затоа за жалбите се користи индекс на `status_zalba_id`, а за казните индекс на `status_kazna_id`.
     32
     33Индексот `idx_zalba_status_zalba_id` овозможува побрзо поврзување на табелата `Zalba` со табелата `StatusZalba`, додека индексот `idx_status_zalba_ime` овозможува пребарување според името на статусот, како `podnesena` или `vo_postapka`.
     34
     35Индексите `idx_zalba_korisnik_id` и `idx_zalba_prekrsok_id` ја подобруваат ефикасноста на JOIN операциите помеѓу табелите `Zalba`, `Korisnik` и `Prekrsok`.
     36
     37Дополнително, индексот `idx_prekrsok_storitel_embg` го забрзува пребарувањето на прекршоци според сторителот, што е корисно при генерирање статистички извештаи за граѓаните со најголем број прекршоци.
     38
     39За финансиските анализи и следење на казните е имплементиран индексот `idx_kazna_status_kazna_id`, кој овозможува побрзо издвојување на казни според нивниот статус преку поврзување со табелата `StatusKazna`. Дополнително, индексот `idx_status_kazna_ime` овозможува пребарување според името на статусот, како `platena` или `neplatena`.
     40
     41Индексот `idx_prekrsok_datum` го подобрува пребарувањето на прекршоците според датум и овозможува поефикасно генерирање на дневни, неделни и месечни извештаи.
     42
    3243
    3344== Анализа на View1: Прекршоци денес ==
     
    300311Execution Time: 950.735 ms
    301312}}}
    302 
    303 За овој поглед беше креиран индексот `idx_kazna_status`, бидејќи погледот филтрира казни според нивниот статус.
    304 
    305 Во овој случај, по креирањето на индексот не се добива подобрување на времето на извршување. Причината е што прашалникот дополнително филтрира според `kazna_id = 523`, а `kazna_id` е примарен клуч и PostgreSQL веќе користи индекс преку `kazna_pkey`.
    306 
    307 Затоа новиот индекс `idx_kazna_status` не е пресуден за овој конкретен прашалник. Бидејќи времето на извршување е околу 1.2 секунди, прашалникот сè уште се смета за прифатлив и не е потребна дополнителна оптимизација.
     313За овој поглед беше креиран индексот `idx_kazna_status_kazna_id`, бидејќи погледот филтрира казни според нивниот статус. Бидејќи статусите се издвоени во посебна табела `StatusKazna`, индексот се поставува на foreign key колоната `status_kazna_id` во табелата `Kazna`.
     314
     315Дополнително може да се користи и индексот `idx_status_kazna_ime` врз колоната `ime` во табелата `StatusKazna`, доколку погледот или прашалникот пребарува според текстуалното име на статусот, како `neplatena`.
     316
     317Во овој конкретен прашалник не се добива значително подобрување на времето на извршување, бидејќи прашалникот дополнително филтрира според `kazna_id = 523`, а `kazna_id` е примарен клуч и PostgreSQL веќе користи индекс преку `kazna_pkey`.
     318
     319Затоа индексот на статусот не е пресуден за овој конкретен прашалник, но е корисен за прашалници каде што се пребаруваат повеќе казни според статус, на пример сите неплатени казни.
     320
    308321
    309322== Анализа на View3: Локации со најмногу прекршоци ==
     
    632645
    633646{{{
    634 CREATE INDEX idx_zalba_status
    635 ON Zalba(status);
     647CREATE INDEX idx_zalba_status_zalba_id
     648ON Zalba(status_zalba_id);
     649
     650CREATE INDEX idx_status_zalba_ime
     651ON StatusZalba(ime);
    636652
    637653CREATE INDEX idx_zalba_korisnik_id
     
    642658}}}
    643659
    644 Индексот `idx_zalba_status` се користи за побрзо филтрирање на жалбите според статус. Индексите `idx_zalba_korisnik_id` и `idx_zalba_prekrsok_id` се додаваат бидејќи табелата `Zalba` се поврзува со `Korisnik` и `Prekrsok` преку овие колони.
     660Индексот `idx_zalba_status_zalba_id` се користи за побрзо поврзување на жалбите со нивниот статус преку foreign key колоната `status_zalba_id`. Бидејќи статусите се нормализирани и издвоени во посебна табела `StatusZalba`, статусот повеќе не се чува како текстуална колона директно во `Zalba`.
     661
     662Индексот `idx_status_zalba_ime` овозможува побрзо пребарување според името на статусот, како `podnesena` или `vo_postapka`.
     663
     664Индексите `idx_zalba_korisnik_id` и `idx_zalba_prekrsok_id` се додаваат бидејќи табелата `Zalba` се поврзува со табелите `Korisnik` и `Prekrsok` преку овие колони.
    645665
    646666==== Време на извршување со индекси ====
     
    651671
    652672'''7B - 9958.522 ms (беше 87808.602 ms)'''
     673
     674По креирањето на индексите `idx_zalba_status_zalba_id`, `idx_status_zalba_ime`, `idx_zalba_korisnik_id` и `idx_zalba_prekrsok_id`, PostgreSQL може поефикасно да ги пронајде активните жалби и да ги изврши спојувањата со табелите `StatusZalba`, `Korisnik` и `Prekrsok`.
     675
     676Времето на извршување на прашалникот се намали од 87808.602 ms на 9958.522 ms, што претставува подобрување од приближно 10 пати.
     677
    653678
    654679{{{