| | 1 | = Партиционирање |
| | 2 | |
| | 3 | == Партициски функции и шема |
| | 4 | |
| | 5 | Поради тоа што `encounters`, `medications`, `observations` и `procedures` користат ист тип за колоната за датум - `datetime2`, тие може да користат иста функција - `pf_Encounters_Year` и иста партициска шема - `ps_Encounters_Year`. |
| | 6 | |
| | 7 | Табелата `conditions` користи различен тип за датум - `date`, па за неа ќе се направи посебна партициска функција и шема. |
| | 8 | |
| | 9 | === `pf_Encounters_Year` и `ps_Encounters_Year` |
| | 10 | |
| | 11 | Партициската функција - `pf_Encounters_Year (datetime2)` е креирана со `boundaries: 2000, 2010, 2020, 2030`. |
| | 12 | |
| | 13 | Партициската шема `ps_Encounters_Year` ги мапира партициите на горните `filegroups`. |
| | 14 | |
| | 15 | {{{#!sql |
| | 16 | create partition function pf_Encounters_Year (datetime2) |
| | 17 | as range right for values |
| | 18 | ( |
| | 19 | '2000-01-01', |
| | 20 | '2010-01-01', |
| | 21 | '2020-01-01', |
| | 22 | '2030-01-01' |
| | 23 | ); |
| | 24 | go |
| | 25 | |
| | 26 | create partition scheme ps_Encounters_Year |
| | 27 | as partition pf_Encounters_Year to |
| | 28 | ( |
| | 29 | FG_Old, |
| | 30 | FG_2000s, |
| | 31 | FG_2010s, |
| | 32 | FG_2020s, |
| | 33 | FG_Future |
| | 34 | ); |
| | 35 | go |
| | 36 | }}} |
| | 37 | |
| | 38 | * `range right` значи дека граничната вредност припаѓа на десната (повисока) партиција. |
| | 39 | |
| | 40 | === `pf_Conditions_Year` и `ps_Conditions_Year` |
| | 41 | |
| | 42 | {{{#!sql |
| | 43 | create partition function pf_Conditions_Year (date) |
| | 44 | as range right for values |
| | 45 | ( |
| | 46 | '2000-01-01', |
| | 47 | '2010-01-01', |
| | 48 | '2020-01-01', |
| | 49 | '2030-01-01' |
| | 50 | ); |
| | 51 | go |
| | 52 | |
| | 53 | create partition scheme ps_Conditions_Year |
| | 54 | as partition pf_Conditions_Year to |
| | 55 | ( |
| | 56 | FG_Old, |
| | 57 | FG_2000s, |
| | 58 | FG_2010s, |
| | 59 | FG_2020s, |
| | 60 | FG_Future |
| | 61 | ); |
| | 62 | go |
| | 63 | }}} |
| | 64 | |
| | 65 | == Clustered индекси со партиционирање |
| | 66 | |
| | 67 | Партиционирањето реално се применува кога clustered индексот е креиран врз партициската шема. |
| | 68 | |
| | 69 | Помалите табели како `allergies` и `immunizations` не се партиционирани затоа што се помали и не зависат од временски период. |
| | 70 | |
| | 71 | === `encounters` |
| | 72 | |
| | 73 | {{{#!sql |
| | 74 | create clustered index CI_Encounters_StartDate_Id |
| | 75 | on encounters(start, Id) |
| | 76 | with (drop_existing = off) |
| | 77 | on ps_Encounters_Year(start); |
| | 78 | go |
| | 79 | }}} |
| | 80 | |
| | 81 | === `observations` |
| | 82 | |
| | 83 | {{{#!sql |
| | 84 | create clustered index CI_Observations_Date_Patient |
| | 85 | on observations([date], patient) |
| | 86 | with (drop_existing = off) |
| | 87 | on ps_Encounters_Year([date]); |
| | 88 | go |
| | 89 | }}} |
| | 90 | |
| | 91 | === `medications` |
| | 92 | |
| | 93 | {{{#!sql |
| | 94 | create clustered index CI_Medications_Start |
| | 95 | on medications([start], patient) |
| | 96 | with (drop_existing = off) |
| | 97 | on ps_Encounters_Year([start]); |
| | 98 | go |
| | 99 | }}} |
| | 100 | |
| | 101 | === `procedures` |
| | 102 | |
| | 103 | {{{#!sql |
| | 104 | create clustered index CI_Procedures_Start |
| | 105 | on procedures([start], patient) |
| | 106 | with(drop_existing = off) |
| | 107 | on ps_Encounters_Year([start]); |
| | 108 | go |
| | 109 | }}} |
| | 110 | |
| | 111 | === `conditions` |
| | 112 | |
| | 113 | {{{#!sql |
| | 114 | create clustered index CI_Conditions_Start |
| | 115 | on conditions([start], patient) |
| | 116 | with (drop_existing = off) |
| | 117 | on ps_Conditions_Year([start]); |
| | 118 | go |
| | 119 | }}} |