Changes between Version 8 and Version 9 of UseCaseModel/evaluation


Ignore:
Timestamp:
08/31/25 16:00:18 (5 days ago)
Author:
175012
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCaseModel/evaluation

    v8 v9  
    66{{{#!sql
    77
     8-- За филтрирање по датум
    89CREATE INDEX idx_policy_sdate ON project.policy(sdate);
    910
     11-- За пребарување според email
     12CREATE INDEX idx_customer_email ON project.customer(email);
     13
     14
    1015}}}
    11 Пример - Овој индекс е корисен кога често филтрираш записи во табелата policy според колоната sdate (датум на почеток). На пример, ако правиш пребарувања за сите полиси кои започнуваат во одреден месец или година, индексот ќе ја забрза операцијата.:
     16Во кодот, не мораш да пишеш USE INDEX (како во MySQL), бидејќи PostgreSQL автоматски ќе го користи индексот ако query planner процени дека е корисен.
    1217{{{#!sql
    13 SELECT * FROM project.policy
    14 WHERE sdate >= '2025-01-01' AND sdate < '2026-01-01';
     18WHERE p.sdate BETWEEN '{0}' AND '{1}' {2}
     19➡️ Овој дел директно ќе го искористи idx_policy_sdate
    1520}}}
    1621
    17 Индекс за подобро JOIN-ирање помеѓу Policy и Payment:
     22А ако во dropdown_params ставаш филтер:
    1823{{{#!sql
    1924
    20 CREATE INDEX idx_payment_policy ON project.payment(policy);
     25AND c.email = 'test@example.com'
     26
     27
     28➡️ Овој дел ќе го искористи idx_customer_email.
    2129
    2230}}}
    2331
    24 Индекс за групирање и филтрирање по тип на пакет:
     32Final:
    2533{{{#!sql
    2634
    27 CREATE INDEX idx_package_type ON project.package(type_pol);
     35string query = @"
     36    SELECT p.p_id,
     37           CASE
     38               WHEN v.pol_id IS NOT NULL THEN 'Auto Policy'
     39               WHEN t.pol_id IS NOT NULL THEN 'Travel Health'
     40               ELSE 'Property Policy'
     41           END AS PolicyType,
     42           c.name AS CustomerName,
     43           p.sdate AS StartDate,
     44           p.edate AS EndDate,
     45           p.package AS PackageCode,
     46           pkg.title AS PackageTitle,
     47           pkg.total AS PackageTotal
     48    FROM project.policy p
     49    LEFT JOIN project.Auto_pol v ON p.p_id = v.pol_id
     50    LEFT JOIN project.Travel_pol t ON p.p_id = t.pol_id
     51    LEFT JOIN project.property_pol pp ON p.p_id = pp.pr_id
     52    LEFT JOIN project.pol_dog pd ON p.p_id = pd.policy
     53    LEFT JOIN project.customer c ON pd.c_id = c.c_id
     54    LEFT JOIN project.package pkg ON p.package = pkg.code
     55    WHERE p.sdate BETWEEN @datef AND @datem
     56      AND (@dropdown IS NULL OR c.email = @dropdown);";
     57
     58using var cmd = new NpgsqlCommand(query, sqlcon);
     59cmd.Parameters.AddWithValue("datef", datef);
     60cmd.Parameters.AddWithValue("datem", datem);
     61cmd.Parameters.AddWithValue("dropdown", (object)dropdown ?? DBNull.Value);
    2862
    2963}}}
     64
     65Имаме создаден индекс врз policy.sdate и customer.email.
     66
     67Го користиме тој индекс во реален query (бидејќи филтрираме по тие полиња).
     68
    3069
    3170== Примери за тригери