| 53 | | == Партиционирање на Encounters по датум |
| 54 | | |
| 55 | | За табелата `encounters` е креирана партициска функција - `pf_Encounters_Year (datetime2)` со `boundaries: 2000, 2010, 2020, 2030` и партициска шема `ps_Encounters_Year` која ги мапира партициите на горните filegroups. |
| | 53 | == Партиционирање |
| | 54 | |
| | 55 | === Партициски функции и шема |
| | 56 | |
| | 57 | Поради тоа што `encounters`, `medications`, `observations` и `procedures` користат ист тип за колоната за датум - `datetime2`, тие може да користат иста функција - `pf_Encounters_Year` и иста партициска шема - `ps_Encounters_Year`. |
| | 58 | |
| | 59 | Табелата `conditions` користи различен тип за датум - `date`, па за неа ќе се направи посебна партициска функција и шема. |
| | 60 | |
| | 61 | ==== `pf_Encounters_Year` и `ps_Encounters_Year` |
| | 62 | |
| | 63 | Партициската функција - `pf_Encounters_Year (datetime2)` е креирана со `boundaries: 2000, 2010, 2020, 2030`. |
| | 64 | |
| | 65 | Партициската шема `ps_Encounters_Year` ги мапира партициите на горните `filegroups`. |
| 80 | | === Clustered индекс на `encounters` со партиционирање |
| 81 | | |
| 82 | | Партиционирањето реално се применува ког clustered индексот е креиран врз партициската шема. |
| | 90 | * `range right` значи дека граничната вредност припаѓа на десната (повисока) партиција. |
| | 91 | |
| | 92 | ==== `pf_Conditions_Year` и `ps_Conditions_Year` |
| | 93 | |
| | 94 | {{{#!sql |
| | 95 | create partition function pf_Conditions_Year (date) |
| | 96 | as range right for values |
| | 97 | ( |
| | 98 | '2000-01-01', |
| | 99 | '2010-01-01', |
| | 100 | '2020-01-01', |
| | 101 | '2030-01-01' |
| | 102 | ); |
| | 103 | go |
| | 104 | |
| | 105 | create partition scheme ps_Conditions_Year |
| | 106 | as partition pf_Conditions_Year to |
| | 107 | ( |
| | 108 | FG_Old, |
| | 109 | FG_2000s, |
| | 110 | FG_2010s, |
| | 111 | FG_2020s, |
| | 112 | FG_Future |
| | 113 | ); |
| | 114 | go |
| | 115 | }}} |
| | 116 | |
| | 117 | === Clustered индекси со партиционирање |
| | 118 | |
| | 119 | Партиционирањето реално се применува кога clustered индексот е креиран врз партициската шема. |
| | 120 | |
| | 121 | Помалите табели како `allergies` и `immunizations` не се партиционирани затоа што се помали и не зависат од временски период. |
| | 122 | |
| | 123 | ==== `encounters` |
| | 130 | go |
| | 131 | }}} |
| | 132 | |
| | 133 | ==== `observations` |
| | 134 | |
| | 135 | {{{#!sql |
| | 136 | create clustered index CI_Observations_Date_Patient |
| | 137 | on observations([date], patient) |
| | 138 | with (drop_existing = off) |
| | 139 | on ps_Encounters_Year([date]); |
| | 140 | go |
| | 141 | }}} |
| | 142 | |
| | 143 | ==== `medications` |
| | 144 | |
| | 145 | {{{#!sql |
| | 146 | create clustered index CI_Medications_Start |
| | 147 | on medications([start], patient) |
| | 148 | with (drop_existing = off) |
| | 149 | on ps_Encounters_Year([start]); |
| | 150 | go |
| | 151 | }}} |
| | 152 | |
| | 153 | ==== `procedures` |
| | 154 | |
| | 155 | {{{#!sql |
| | 156 | create clustered index CI_Procedures_Start |
| | 157 | on procedures([start], patient) |
| | 158 | with(drop_existing = off) |
| | 159 | on ps_Encounters_Year([start]); |
| | 160 | go |
| | 161 | }}} |
| | 162 | |
| | 163 | ==== `conditions` |
| | 164 | |
| | 165 | {{{#!sql |
| | 166 | create clustered index CI_Conditions_Start |
| | 167 | on conditions([start], patient) |
| | 168 | with (drop_existing = off) |
| | 169 | on ps_Conditions_Year([start]); |
| | 170 | go |