wiki:NonClusteredIndexes

Некластерирани индекси

Некластерираните индекси се избрани според најчестите операции:

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 ON
  • SET 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.