I database hanno un sacco di gergo, e cardinalità è una di quelle parole che le persone esperte tendono a dimenticare di non conoscere una volta. Ma se non la conoscete – e ci vuole un po’ per prendere confidenza con la cardinalità – è super confuso quando il DBA la butta nel mezzo di una frase senza rallentare! Non temere: Ti ho preso, come si suol dire.Cardinalità significa due cose nei database. Per i nostri scopi, una conta molto più dell’altra. La definizione di cardinalità che conta molto per le prestazioni delle query è la cardinalità dei dati. Si tratta di quanti valori distinti ci sono in una colonna. Il primo significato di cardinalità è quando si progetta il database, quello che si chiama modellazione dei dati. In questo senso, la cardinalità significa se una relazione è uno-a-uno, molti-a-uno, o molti-a-molti. La definizione ufficiale di cardinalità, non da dizionario dei database, è matematica: il numero di valori in un insieme. Quando viene applicata ai database, il significato è un po’ diverso: è il numero di valori distinti in una colonna della tabella, rispetto al numero di righe della tabella. I valori ripetuti nella colonna non contano. Di solito non si parla di cardinalità come un numero, però. È più comune parlare semplicemente di cardinalità “alta” e “bassa”. Un sacco di valori distinti è alta cardinalità; un sacco di valori ripetuti è bassa cardinalità.Immaginate una tabella di descrizione del prodotto in un database di e-commerce:La colonna ProductID
sarà ad alta cardinalità perché è probabilmente la chiave primaria di quella tabella, quindi è totalmente unica. Se ci sono mille righe nella tabella, ci saranno mille valori ProductID
diversi. La colonna Category
avrà molte ripetizioni, e sarà di bassa o media cardinalità: forse 50 o 100 valori Category
diversi. Name
è probabilmente ad alta cardinalità, a meno che non ci sia più di quello che si vede in questa tabella (come più righe per diversi colori di prodotti e altre variazioni). La cardinalità ha un forte impatto sulle prestazioni, perché influenza il piano di esecuzione della query. Il pianificatore esaminerà le statistiche delle colonne e le userà per capire quanti valori è probabile che una query corrisponda, tra le altre cose. A seconda di ciò che trova, potrebbe usare diversi piani di esecuzione delle query per cercare di ottenere le migliori prestazioni. Ma questo è un argomento per un altro post sul blog, perché ci vuole un po’ di lavoro per spiegarlo.Quindi ora, la prossima volta che qualcuno lascia cadere “alta cardinalità” in una frase senza fare una pausa, sapete che in realtà intende “un sacco di valori diversi”. Ed ecco fatto!