Changes between Version 8 and Version 9 of UseCaseModel/evaluation
- Timestamp:
- 08/31/25 16:00:18 (5 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
UseCaseModel/evaluation
v8 v9 6 6 {{{#!sql 7 7 8 -- За филтрирање по датум 8 9 CREATE INDEX idx_policy_sdate ON project.policy(sdate); 9 10 11 -- За пребарување според email 12 CREATE INDEX idx_customer_email ON project.customer(email); 13 14 10 15 }}} 11 Пример - Овој индекс е корисен кога често филтрираш записи во табелата policy според колоната sdate (датум на почеток). На пример, ако правиш пребарувања за сите полиси кои започнуваат во одреден месец или година, индексот ќе ја забрза операцијата.: 16 Во кодот, не мораш да пишеш USE INDEX (како во MySQL), бидејќи PostgreSQL автоматски ќе го користи индексот ако query planner процени дека е корисен. 12 17 {{{#!sql 13 SELECT * FROM project.policy 14 WHERE sdate >= '2025-01-01' AND sdate < '2026-01-01'; 18 WHERE p.sdate BETWEEN '{0}' AND '{1}' {2} 19 ➡️ Овој дел директно ќе го искористи idx_policy_sdate 15 20 }}} 16 21 17 Индекс за подобро JOIN-ирање помеѓу Policy и Payment:22 А ако во dropdown_params ставаш филтер: 18 23 {{{#!sql 19 24 20 CREATE INDEX idx_payment_policy ON project.payment(policy); 25 AND c.email = 'test@example.com' 26 27 28 ➡️ Овој дел ќе го искористи idx_customer_email. 21 29 22 30 }}} 23 31 24 Индекс за групирање и филтрирање по тип на пакет:32 Final: 25 33 {{{#!sql 26 34 27 CREATE INDEX idx_package_type ON project.package(type_pol); 35 string 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 58 using var cmd = new NpgsqlCommand(query, sqlcon); 59 cmd.Parameters.AddWithValue("datef", datef); 60 cmd.Parameters.AddWithValue("datem", datem); 61 cmd.Parameters.AddWithValue("dropdown", (object)dropdown ?? DBNull.Value); 28 62 29 63 }}} 64 65 Имаме создаден индекс врз policy.sdate и customer.email. 66 67 Го користиме тој индекс во реален query (бидејќи филтрираме по тие полиња). 68 30 69 31 70 == Примери за тригери