| | 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 | }}} |