SlideShare a Scribd company logo
SQL HiA
Indekser
SQL HiA
Indekser
• B-Trær Indeks bygget opp som tre-struktur.
Benyttes typisk på foreign key.
• Hash-tabeller Nøkkel-tranformering.
Benyttes typisk på primary key (ID).
Clustered Index:
Bestemmer fysisk rekkefølge på data
i database-tabeller.
Kun en clustered index pr tabell.
Må alltid lages før non-clustered index.
Må alltid lages før data plasseres i tabellen.
SQL HiA
Clustered Index / Non-Clustered Index
Index
Data
Clustered Non-Clustered
SQL HiA
B-Trær
Et B-Tre av orden m er definert ved følgende:
- Roten er enten et løv eller har mellom 2 og m barn.
- Alle ikke-løv (evnt. bortsett fra roten) har mellom [m/2] og m barn.
- Alle løv befinner seg på samme nivå.
12 15 25 31 41 59 91
21 48 72
1-4-8-11 12-13 15-18-19 21-24 25-26 31-38 41-43-46 48-49-50 59-68 72-78 84-88 91-92-99
84
SQL HiA
B-trær Eks: Innsetting i et B-tre av orden 4 (1)
8,11,12 16,17 41,5222,23,31 58,59,61
16:- 41:58
22:-
SQL HiA
B-trær Eks: Innsetting i et B-tre av orden 4 (2)
8,11,12 16,17,18 41,5222,23,31 58,59,61
16:- 41:58
22:-
SQL HiA
B-trær Eks: Innsetting i et B-tre av orden 4 (3)
1,8 11,12 41,5222,23,31 58,59,61
11:16 41:58
22:-
16,17,18
SQL HiA
B-trær Eks: Innsetting i et B-tre av orden 4 (4)
1,8 11,12 41,5222,23,31 58,59,61
11:16 41:58
22:-
16,17 18,19
SQL HiA
B-trær Eks: Innsetting i et B-tre av orden 4 (5)
1,8 11,12 41,5222,23,31 58,59,61
11:- 41:58
16:22
16,17 18,19
18:-
SQL HiA
B-trær Eks: Innsetting i et B-tre av orden 4 (6)
1,8 11,12 41,5222,23 58,59,61
11:- 41:58
16:22
16,17 18,19
18:-
28,31
SQL HiA
B-trær Eks: Innsetting i et B-tre av orden 4 (7)
1,8 11,12 41,5222,23 58,59,61
11:- 58:-
16:22
16,17 18,19
18:-
28,31
28:-
SQL HiA
B-trær Eks: Innsetting i et B-tre av orden 4 (8)
1,8 11,12 41,5222,23 58,59,61
11:- 58:-
22:-
16,17 18,19
18:-
28,31
28:-
16:- 41:-
SQL HiA
Hashing / Nøkkel-transformering / Randomisering
Hashing
Key Transformed Key
SQL HiA
Nøkkel-transformering
1
2
3
4
5
6
7
8
9
.
.
.
PNr
1
2
3
4
5
6
7
8
9
.
.
.
ID
PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID
SQL HiA
Nøkkel-transformering
6 4 7 2 1
KundeNr TverrSum
Distrikt
SQL HiA
Nøkkel-transformering
6 4 7 2 3
KundeNr Siste siffer i tverrsummen av
siste siffer i produktene
6 4 7 2
1 2 3 4
6 8 21 8
KundeNr
Vekttall
Produkt
SQL HiA
Nøkkel-transformering
32191
51877
77638
PNr ID
PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID
32191
51877
77638
Ubenyttet
1 … 10000
SQL HiA
Hash-tabeller
3434
6767
88
2121
7373
6262
6868
8686
66
77
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
33
44
11
22
55
88
IDID
TransTrans
34 4
67 7
8 1
21 3
73 8
62 7
68 7
86 9
34
67
SQL HiA
Nøkkel-tranformering - Folding
Nøkkel-
transformering
ID = 29384756 PostNr [ 1 - 1000 ]
2 9 3 8 4 7 5 6
7 6 9 4
7 7 0
+
+ 1
SQL HiA
Nøkkel-transformering - Divisjon-rest-metoden
Nøkkel-
transformering
ID = 29384756 PostNr [ 1 - 1000 ]
2 9 3 8 4 7 5 6 : 9 9 7
1 7 5
SQL HiA
Nøkkel-tranformering - Uheldig tranformering
HSize = 10000
KeySize = 8
HValueMax = 8 * 127 = 1016
1016
10000
Tranformering av hvert tegn i Key
til tilhørende ordinal-verdi:
SQL HiA
Ulike nøkkel-transformeringer
int Hash1(char* Key, int HSize)
{
return ((int)Key[0] + (int)Key[1] + (int)Key[2]) % HSize;
}
Transformed
Key Data
Key
int Hash2(char* Key, int HSize)
{
return ((int)Key[0] + 27 * (int)Key[1] + 729 * (int)Key[2]) % HSize;
}
SQL HiA
Ulike nøkkel-transformeringer
[ ]Key KeySize i i
i
KeySize
−
=
−
∑ *32
0
1
int Hash3(char* Key, int KeySize, int HSize)
{
int HashVal;
HashVal = (int)Key[0];
for(int i = 1; i < KeySize; i++)
HashVal = HashVal*32 + (int)Key[i];
HashVal = HashVal % Hsize;
return HashVal;
}
Transformed
Key Data
Key
SQL HiA
Hashing a key to a database page - SQLBase
1. Transformer symbolsk key ved å la hvert tegn bli representert ved tilhørende ASCII-verdi.
Deretter transformeres denne ASCII-verdien som vist nedenfor til et såkalt binært fullword (4 bytes).
1A. Del ASCII-key inn i 4-byte enheter.
1B. XOR alle 4-byte enhetene sammen til et 4-byte resultat (ingen key-del blir borte).
1C. Utfør bitwise complement (fjerner event. bias)
2. Transformer resultatet fra 1 (binary fullword) til et heltall i side-intervallet
ved å ta divisjonsresten med minste primtall som er større enn eller lik antall sider.
3. Transformer output fra 2 til en fysisk side adresse
ved å legge til start side-nummer for for første rad i tabellen.
SQL HiA
Hashing a key to a database page - SQLBase - Eks
1. 9 3 0 5 E J S M --> 57 51 48 53 69 74 83 77ASCII
1A. Key1 = 57 51 48 53
Key2 = 69 74 83 77
1B. Key1 = 0011 1001 0011 0011 0011 0000 0011 0101
XOR Key2 = 0100 0101 0100 1010 0101 0011 0100 1101
-------------------------------------------------------------------------
= xKey = 0111 1100 0111 1001 0110 0011 0111 1000 = 124 121 99 120 ASCII
1C. ~xKey = 1000 0011 1000 0110 1001 1100 1000 0111 = 131 134 156 135 ASCII
bfKey = 2206637191 (fullword key)
2. Page Adresses 0 - 1752 (1753 hash buckets)
2206637191 MOD 1753 = 1110
3. Første side-adresse for tabellen er 60 => Side-adresse = 1110 + 60 = 1170

More Related Content

Viewers also liked

Lessons from quantifying behavior in obesity - Olivia Affuso
Lessons from quantifying behavior in obesity - Olivia AffusoLessons from quantifying behavior in obesity - Olivia Affuso
Lessons from quantifying behavior in obesity - Olivia AffusoErnesto Ramirez
 
For me doing is a form of knowing: triggering my actions with data - Denis Ha...
For me doing is a form of knowing: triggering my actions with data - Denis Ha...For me doing is a form of knowing: triggering my actions with data - Denis Ha...
For me doing is a form of knowing: triggering my actions with data - Denis Ha...Ernesto Ramirez
 
Kouris Kalligas: Analyzing My Weight and Sleep
Kouris Kalligas: Analyzing My Weight and SleepKouris Kalligas: Analyzing My Weight and Sleep
Kouris Kalligas: Analyzing My Weight and SleepErnesto Ramirez
 
T1 Textile Card Holder Wallet
T1 Textile Card Holder WalletT1 Textile Card Holder Wallet
T1 Textile Card Holder WalletFelix Simon
 
The lion king aimar y adam
The lion king aimar y adamThe lion king aimar y adam
The lion king aimar y adamjimisito89
 
Ensamble y mantenimiento UNAD - Fase1
Ensamble y mantenimiento UNAD - Fase1Ensamble y mantenimiento UNAD - Fase1
Ensamble y mantenimiento UNAD - Fase1sebasmaidenx
 
Associate architect performance appraisal
Associate architect performance appraisalAssociate architect performance appraisal
Associate architect performance appraisalmatthewjones2187
 
التعلم الالكتروني
التعلم الالكترونيالتعلم الالكتروني
التعلم الالكترونيsaraqudsi
 

Viewers also liked (11)

Service portfolio veeksha
Service portfolio veekshaService portfolio veeksha
Service portfolio veeksha
 
Lessons from quantifying behavior in obesity - Olivia Affuso
Lessons from quantifying behavior in obesity - Olivia AffusoLessons from quantifying behavior in obesity - Olivia Affuso
Lessons from quantifying behavior in obesity - Olivia Affuso
 
For me doing is a form of knowing: triggering my actions with data - Denis Ha...
For me doing is a form of knowing: triggering my actions with data - Denis Ha...For me doing is a form of knowing: triggering my actions with data - Denis Ha...
For me doing is a form of knowing: triggering my actions with data - Denis Ha...
 
Kouris Kalligas: Analyzing My Weight and Sleep
Kouris Kalligas: Analyzing My Weight and SleepKouris Kalligas: Analyzing My Weight and Sleep
Kouris Kalligas: Analyzing My Weight and Sleep
 
T1 Textile Card Holder Wallet
T1 Textile Card Holder WalletT1 Textile Card Holder Wallet
T1 Textile Card Holder Wallet
 
Marcas pc
Marcas pcMarcas pc
Marcas pc
 
The lion king aimar y adam
The lion king aimar y adamThe lion king aimar y adam
The lion king aimar y adam
 
Ensamble y mantenimiento UNAD - Fase1
Ensamble y mantenimiento UNAD - Fase1Ensamble y mantenimiento UNAD - Fase1
Ensamble y mantenimiento UNAD - Fase1
 
Associate architect performance appraisal
Associate architect performance appraisalAssociate architect performance appraisal
Associate architect performance appraisal
 
التعلم الالكتروني
التعلم الالكترونيالتعلم الالكتروني
التعلم الالكتروني
 
Panchamukhi
PanchamukhiPanchamukhi
Panchamukhi
 

More from Helene Fosse (20)

K12
K12K12
K12
 
K06
K06K06
K06
 
K08
K08K08
K08
 
K09
K09K09
K09
 
K11
K11K11
K11
 
K05
K05K05
K05
 
K04
K04K04
K04
 
K02 (1)
K02 (1)K02 (1)
K02 (1)
 
K01
K01K01
K01
 
Digitalismen
DigitalismenDigitalismen
Digitalismen
 
Postimpresjonismen
PostimpresjonismenPostimpresjonismen
Postimpresjonismen
 
Impresjonismen
ImpresjonismenImpresjonismen
Impresjonismen
 
Romantikk og realisme
Romantikk og realismeRomantikk og realisme
Romantikk og realisme
 
Roma
RomaRoma
Roma
 
Rokokko og klassisisme
Rokokko og klassisismeRokokko og klassisisme
Rokokko og klassisisme
 
Renessansen 2
Renessansen 2Renessansen 2
Renessansen 2
 
Renessansen 1
Renessansen 1Renessansen 1
Renessansen 1
 
Postimpresjonismen
PostimpresjonismenPostimpresjonismen
Postimpresjonismen
 
Oppsummering
OppsummeringOppsummering
Oppsummering
 
Middelalder
MiddelalderMiddelalder
Middelalder
 

K07

  • 2. SQL HiA Indekser • B-Trær Indeks bygget opp som tre-struktur. Benyttes typisk på foreign key. • Hash-tabeller Nøkkel-tranformering. Benyttes typisk på primary key (ID). Clustered Index: Bestemmer fysisk rekkefølge på data i database-tabeller. Kun en clustered index pr tabell. Må alltid lages før non-clustered index. Må alltid lages før data plasseres i tabellen.
  • 3. SQL HiA Clustered Index / Non-Clustered Index Index Data Clustered Non-Clustered
  • 4. SQL HiA B-Trær Et B-Tre av orden m er definert ved følgende: - Roten er enten et løv eller har mellom 2 og m barn. - Alle ikke-løv (evnt. bortsett fra roten) har mellom [m/2] og m barn. - Alle løv befinner seg på samme nivå. 12 15 25 31 41 59 91 21 48 72 1-4-8-11 12-13 15-18-19 21-24 25-26 31-38 41-43-46 48-49-50 59-68 72-78 84-88 91-92-99 84
  • 5. SQL HiA B-trær Eks: Innsetting i et B-tre av orden 4 (1) 8,11,12 16,17 41,5222,23,31 58,59,61 16:- 41:58 22:-
  • 6. SQL HiA B-trær Eks: Innsetting i et B-tre av orden 4 (2) 8,11,12 16,17,18 41,5222,23,31 58,59,61 16:- 41:58 22:-
  • 7. SQL HiA B-trær Eks: Innsetting i et B-tre av orden 4 (3) 1,8 11,12 41,5222,23,31 58,59,61 11:16 41:58 22:- 16,17,18
  • 8. SQL HiA B-trær Eks: Innsetting i et B-tre av orden 4 (4) 1,8 11,12 41,5222,23,31 58,59,61 11:16 41:58 22:- 16,17 18,19
  • 9. SQL HiA B-trær Eks: Innsetting i et B-tre av orden 4 (5) 1,8 11,12 41,5222,23,31 58,59,61 11:- 41:58 16:22 16,17 18,19 18:-
  • 10. SQL HiA B-trær Eks: Innsetting i et B-tre av orden 4 (6) 1,8 11,12 41,5222,23 58,59,61 11:- 41:58 16:22 16,17 18,19 18:- 28,31
  • 11. SQL HiA B-trær Eks: Innsetting i et B-tre av orden 4 (7) 1,8 11,12 41,5222,23 58,59,61 11:- 58:- 16:22 16,17 18,19 18:- 28,31 28:-
  • 12. SQL HiA B-trær Eks: Innsetting i et B-tre av orden 4 (8) 1,8 11,12 41,5222,23 58,59,61 11:- 58:- 22:- 16,17 18,19 18:- 28,31 28:- 16:- 41:-
  • 13. SQL HiA Hashing / Nøkkel-transformering / Randomisering Hashing Key Transformed Key
  • 15. SQL HiA Nøkkel-transformering 6 4 7 2 1 KundeNr TverrSum Distrikt
  • 16. SQL HiA Nøkkel-transformering 6 4 7 2 3 KundeNr Siste siffer i tverrsummen av siste siffer i produktene 6 4 7 2 1 2 3 4 6 8 21 8 KundeNr Vekttall Produkt
  • 17. SQL HiA Nøkkel-transformering 32191 51877 77638 PNr ID PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID 32191 51877 77638 Ubenyttet 1 … 10000
  • 19. SQL HiA Nøkkel-tranformering - Folding Nøkkel- transformering ID = 29384756 PostNr [ 1 - 1000 ] 2 9 3 8 4 7 5 6 7 6 9 4 7 7 0 + + 1
  • 20. SQL HiA Nøkkel-transformering - Divisjon-rest-metoden Nøkkel- transformering ID = 29384756 PostNr [ 1 - 1000 ] 2 9 3 8 4 7 5 6 : 9 9 7 1 7 5
  • 21. SQL HiA Nøkkel-tranformering - Uheldig tranformering HSize = 10000 KeySize = 8 HValueMax = 8 * 127 = 1016 1016 10000 Tranformering av hvert tegn i Key til tilhørende ordinal-verdi:
  • 22. SQL HiA Ulike nøkkel-transformeringer int Hash1(char* Key, int HSize) { return ((int)Key[0] + (int)Key[1] + (int)Key[2]) % HSize; } Transformed Key Data Key int Hash2(char* Key, int HSize) { return ((int)Key[0] + 27 * (int)Key[1] + 729 * (int)Key[2]) % HSize; }
  • 23. SQL HiA Ulike nøkkel-transformeringer [ ]Key KeySize i i i KeySize − = − ∑ *32 0 1 int Hash3(char* Key, int KeySize, int HSize) { int HashVal; HashVal = (int)Key[0]; for(int i = 1; i < KeySize; i++) HashVal = HashVal*32 + (int)Key[i]; HashVal = HashVal % Hsize; return HashVal; } Transformed Key Data Key
  • 24. SQL HiA Hashing a key to a database page - SQLBase 1. Transformer symbolsk key ved å la hvert tegn bli representert ved tilhørende ASCII-verdi. Deretter transformeres denne ASCII-verdien som vist nedenfor til et såkalt binært fullword (4 bytes). 1A. Del ASCII-key inn i 4-byte enheter. 1B. XOR alle 4-byte enhetene sammen til et 4-byte resultat (ingen key-del blir borte). 1C. Utfør bitwise complement (fjerner event. bias) 2. Transformer resultatet fra 1 (binary fullword) til et heltall i side-intervallet ved å ta divisjonsresten med minste primtall som er større enn eller lik antall sider. 3. Transformer output fra 2 til en fysisk side adresse ved å legge til start side-nummer for for første rad i tabellen.
  • 25. SQL HiA Hashing a key to a database page - SQLBase - Eks 1. 9 3 0 5 E J S M --> 57 51 48 53 69 74 83 77ASCII 1A. Key1 = 57 51 48 53 Key2 = 69 74 83 77 1B. Key1 = 0011 1001 0011 0011 0011 0000 0011 0101 XOR Key2 = 0100 0101 0100 1010 0101 0011 0100 1101 ------------------------------------------------------------------------- = xKey = 0111 1100 0111 1001 0110 0011 0111 1000 = 124 121 99 120 ASCII 1C. ~xKey = 1000 0011 1000 0110 1001 1100 1000 0111 = 131 134 156 135 ASCII bfKey = 2206637191 (fullword key) 2. Page Adresses 0 - 1752 (1753 hash buckets) 2206637191 MOD 1753 = 1110 3. Første side-adresse for tabellen er 60 => Side-adresse = 1110 + 60 = 1170

Editor's Notes

  1. Indekser er hjelpeinformasjon for raskere å kunne gjenfinne poster (records) i en database. Ofte benyttes såkalte B-trær som indekser (typisk på fremmednøkler). På ID benyttes av og til såkalte Hashtabeller. Hashtabellene inneholder transformerte ID (tranformert til en post-adresse).
  2. Hash1 gir dårlig spredning. Bl.a. vil ID_1 = abc og ID_2 = cba gi samme adresse. Has2 gir en noe bedre spredning idet nøkkelen nå utgjør et posisjons-system ved at endret rekkefølge av elementene i ID gir ulik adresse.