Некластерирани индекси
Некластерираните индекси се избрани според најчестите операции:
O1: Времеплов на encounters по пациент
select *
from encounters
where patient = @patient
and [start] >= @from and [start] < @to
order by [start];
go
O2: observations за еден encounter
select * from observations where encounter = @encounter order by [date]; go
O3: conditions за еден пациент
select * from conditions where patient = @patient order by [start]; go
O4: medications за пациент
select * from medications where patient = @patient order by [start]; go
encounters
create nonclustered index IX_Encounters_Patient_Start on dbo.encounters(patient, [start]) include (stop, encounterclass, code, description, payer, provider, organization, base_encounter_cost, total_claim_cost, payer_coverage); go
Овој индекс ја поддржува О1 - бара по пациент, опсег по start.
include избегнува пребарување по типични колони.
observations
create nonclustered index IX_Observations_Encounters_Date on dbo.observations(encounter, [date]) include (patient, category, code, description, value, units, type); go
Овој индекс ја поддржува О2 - пребарува по encounter, подредува по датум.
conditions
create nonclustered index IX_Conditions_Patient_Start on dbo.conditions(patient, [start]) include (stop, encounter, system, code, description); go create nonclustered index IX_Conditions_Encounter on dbo.conditions(encounter) include (patient, [start], stop, system, code, description); go
Првиот индекс ја поддржува О3.
Вториот индекс поддржува join-ови и филтри според encounter.
medications
create nonclustered index IX_Medications_Patient_Start on dbo.medications(patient, [start]) include (stop, payer, encounter, code, description, dispenses, base_cost, payer_coverage, totalcost, reasoncode, reasondescription); go create nonclustered index IX_Medications_Encounter on dbo.medications(encounter) include (patient, [start], stop, code, totalcost); go
procedures
create nonclustered index IX_Procedures_Encounter_Start on dbo.procedures(encounter, [start]) include (patient, system, code, description, base_cost, reasoncode, reasondescription); go
Верификација на индексите
Перформансите на индексите се верифицирани преку:
- споредба на извршување пред и по креирање на индекс
- мерење на логички читања (logical reads)
- мерење на CPU време и вкупно време
- анализа на execution plan
За мерење се користат:
SET STATISTICS IO ONSET STATISTICS TIME ON- Actual Execution Plan
Пример 1: Encounters по пациент
Пред индекс
set statistics io on; set statistics time on; select * from encounters where patient = '2CA8B5B3-AD56-3C77-10FA-BF5C7D30E78B' and [start] >= '1997-12-23' and [start] < '2025-11-01' order by [start]; set statistics io off; set statistics time off;
Резултати (пред индекс):
- Logical reads:
- CPU time:
- Elapsed time:
- Execution plan:
Резултати после индекс:
- Logical reads: 129
- CPU time: 0ms
- Elapsed time: 8ms
- Execution plan:
Last modified
12 days ago
Last modified on 02/16/26 20:38:51
Note:
See TracWiki
for help on using the wiki.
