| 135 | |
| 136 | === 5. Напредно филтрирање |
| 137 | |
| 138 | Овој процес на напредно филтрирање би бил многу заморен за базата кога би имало премногу податоци низ кои мора да помине. |
| 139 | Затоа ќе воведеме соодветно индекси на клучните колони (оние кои се изложени на најголемо употребување) |
| 140 | Оваа функционалност е дел од листањето на Report објекти, каде е назначена како Advanced Filtering. |
| 141 | |
| 142 | {{{ |
| 143 | -- поради филтрирањето по Person атрибутот |
| 144 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_report_person ON report (person_id); |
| 145 | |
| 146 | -- индекси за забрзување на спојувањата на табелите во функционалноста на „Напредно филтрирање“, на страна на Reports |
| 147 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_employment_report_fk ON employment_report (report_id); |
| 148 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_academic_report_fk ON academic_report (report_id); |
| 149 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_medical_report_fk ON medical_report (report_id); |
| 150 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_criminal_report_fk ON criminal_report (report_id); |
| 151 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_punishment_fk_report ON punishment (report_id); |
| 152 | |
| 153 | -- за medicalreport_diagnosis поврзувањата индексите ги направив во 4та анализа |
| 154 | |
| 155 | -- чести join операции кои се користат |
| 156 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_medical_doctor_fk ON medical_report (doctor_id); |
| 157 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_academic_institution_fk ON academic_report (institution_id); |
| 158 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_criminal_crime_type_fk ON criminal_report (crime_type_id); |
| 159 | |
| 160 | -- за пребарување по %term% |
| 161 | CREATE EXTENSION IF NOT EXISTS pg_trgm; |
| 162 | |
| 163 | -- често е користено во филтрирањето за Person и Doctor, пребарувањето по име или презиме |
| 164 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_person_name ON person USING gin (lower(name) gin_trgm_ops); |
| 165 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_person_surname ON person USING gin (lower(surname) gin_trgm_ops); |
| 166 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_doctor_name_trgm ON doctor USING gin (lower(name) gin_trgm_ops); |
| 167 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_doctor_surname_trgm ON doctor USING gin (lower(surname) gin_trgm_ops); |
| 168 | |
| 169 | -- во филтрирањето се користи често за да се пресмета години и ранг на Report кои припаѓаат на Person објекти кои се од - до некоја возраст, или точна возраст |
| 170 | -- бидејќи е само за живи, затоа го условуваме кога индексот да биде активиран |
| 171 | CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_person_dob_aliveON person (date_of_birth) WHERE date_of_death IS NULL; |
| 172 | }}} |