Databaser har en hel del jargong, och kardinalitet är ett av de ord som erfarna personer tenderar att glömma att de inte kände till en gång i tiden. Men om du inte känner till det – och det tar ett tag att verkligen bli bekväm med kardinalitet – är det superförvirrande när DBA:n bara släpper in det mitt i en mening utan att sakta ner! Frukta inte: Cardinality betyder två saker i databaser. För våra syften är det ena mycket viktigare än det andra. Låt oss göra den enkla först, och sedan gräva i den som har betydelse för frågeprestanda.Den definition av kardinalitet som har stor betydelse för frågeprestanda är datakardinalitet. Det handlar om hur många distinkta värden som finns i en kolumn.Den första betydelsen av kardinalitet är när du utformar databasen – det som kallas datamodellering. I denna mening betyder cardinality om en relation är en till en, många till en eller många till många. Så du talar egentligen om relationens kardinalitet.Kardinalitetens officiella, icke-databasordboksdefinition är matematisk: antalet värden i en mängd. När den tillämpas på databaser är innebörden lite annorlunda: det är antalet distinkta värden i en tabellkolumn i förhållande till antalet rader i tabellen. Upprepade värden i kolumnen räknas inte.Vi brukar dock inte tala om kardinalitet som ett antal. Det är vanligare att tala om ”hög” och ”låg” kardinalitet. Många distinkta värden är hög kardinalitet, många upprepade värden är låg kardinalitet.Föreställ dig en produktbeskrivningstabell i en databas för e-handel:Kolumnen ProductID
kommer att ha hög kardinalitet eftersom den troligen är primärnyckeln för den tabellen, så den är helt unik. Om det finns tusen rader i tabellen kommer det att finnas tusen olika ProductID
-värden. Kolumnen Category
kommer att ha många upprepningar, och den kommer att ha låg eller medelhög kardinalitet: kanske 50 eller 100 olika Category
-värden. Name
har förmodligen hög kardinalitet, om det inte finns mer i tabellen än vad man kan tro (t.ex. flera rader för olika produktfärger och andra variationer).Kardinaliteten påverkar prestandan mycket, eftersom den påverkar planen för utförandet av sökningen. Planeraren undersöker kolumnstatistik och använder den bland annat för att räkna ut hur många värden en fråga sannolikt kommer att matcha. Beroende på vad den hittar kan den använda olika utförandeplaner för att försöka få den bästa prestandan. Men det är ett ämne för ett annat blogginlägg, eftersom det kräver lite arbete att förklara.Så nästa gång någon nämner ”hög kardinalitet” i en mening utan att göra en paus vet du att de verkligen menar ”många olika värden”. Och där har du det!