Bases de dados têm muito jargão, e cardinalidade é uma daquelas palavras que as pessoas experientes tendem a esquecer que não sabiam uma única vez. Mas se você não sabe – e leva um tempo para ficar realmente confortável com a cardinalidade – é super confuso quando o DBA simplesmente a deixa cair no meio de uma frase sem diminuir a velocidade! Não tenha medo: Tenho-te a ti, como se costuma dizer. A cardinalidade significa duas coisas em bases de dados. Para os nossos propósitos, uma é muito mais importante do que a outra. A definição de cardinalidade que importa muito para o desempenho da consulta é a cardinalidade dos dados. O primeiro significado de cardinalidade é quando você está projetando a base de dados – o que é chamado de modelagem de dados. Neste sentido, cardinalidade significa se uma relação é um-para-um, muitos-para-um, ou muitos-para-muitos. Então você está realmente falando sobre a cardinalidade da relação. A definição oficial do dicionário de cardinalidade, sem base de dados, é matemática: o número de valores em um conjunto. Quando aplicado a bases de dados, o significado é um pouco diferente: é o número de valores distintos em uma coluna da tabela, em relação ao número de linhas na tabela. Os valores repetidos na coluna não contam, mas normalmente não falamos de cardinalidade como um número. É mais comum falar simplesmente de “alta” e “baixa” cardinalidade. Muitos valores distintos são de alta cardinalidade; muitos valores repetidos são de baixa cardinalidade. Imagine uma tabela de descrição do produto em uma base de dados de comércio eletrônico:A coluna ProductID
será de alta cardinalidade porque provavelmente é a chave primária dessa tabela, então é totalmente única. Se houver mil linhas na tabela, haverá mil valores diferentes de ProductID
. A coluna Category
terá muita repetição, e será de baixa ou média cardinalidade: talvez 50 ou 100 valores diferentes de Category
. Name
é provavelmente de alta cardinalidade, a não ser que haja mais do que o que se vê nesta tabela (como múltiplas linhas para diferentes cores de produtos e outras variações). A cardinalidade tem muito impacto no desempenho, pois influencia o plano de execução da consulta. O planejador examinará as estatísticas da coluna e as utilizará para descobrir quantos valores uma consulta provavelmente combinará, entre outras coisas. Dependendo do que encontrar, poderá usar diferentes planos de execução de consulta para tentar obter a melhor performance. Mas esse é um tópico para um post de blog diferente, porque é preciso um pouco de trabalho para explicar. Então agora, da próxima vez que alguém deixar cair “alta cardinalidade” em uma frase sem pausar, você sabe que eles realmente significam “um monte de valores diferentes”. E aí está!