Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Diferenças entre INDEX, PRIMARY, UNIQUE, FULLTEXT no MySQL?

Diferenças


  • CHAVE ou ÍNDICE refere-se a um índice normal não exclusivo. Valores não distintos para o índice são permitidos, então o índice pode contêm linhas com valores idênticos em todas as colunas do índice. Esses índices não impõem restrições aos seus dados, portanto, são usados ​​apenas para acesso - para alcançar rapidamente determinados intervalos de registros sem verificar todos os registros.

  • ÚNICO refere-se a um índice em que todas as linhas do índice devem ser exclusivas. Ou seja, a mesma linha pode não ter valores não NULL idênticos para todas as colunas neste índice como outra linha. Além de serem usados ​​para alcançar rapidamente determinados intervalos de registros, os índices UNIQUE podem ser usados ​​para impor restrições aos dados, pois o sistema de banco de dados não permite que a regra de valores distintos seja quebrada ao inserir ou atualizar dados.

    Seu sistema de banco de dados pode permitir que um índice UNIQUE seja aplicado a colunas que permitem valores NULL; nesse caso, duas linhas podem ser idênticas se ambas contiverem um valor NULL (a lógica aqui é que NULL é considerado diferente de si mesmo). Dependendo da sua inscrição, no entanto, você pode considere isso indesejável:se você deseja evitar isso, você deve proibir valores NULL nas colunas relevantes.

  • PRIMÁRIO age exatamente como um índice UNIQUE, exceto que é sempre chamado de 'PRIMARY', e pode haver apenas um em uma tabela (e deve sempre seja um; embora alguns sistemas de banco de dados não imponham isso). Um índice PRIMARY destina-se a ser um meio primário para identificar exclusivamente qualquer linha na tabela, portanto, diferentemente de UNIQUE, ele não deve ser usado em nenhuma coluna que permita valores NULL. Seu índice PRIMARY deve estar no menor número de colunas que são suficientes para identificar exclusivamente uma linha. Muitas vezes, esta é apenas uma coluna contendo um número único incrementado automaticamente, mas se houver qualquer outra coisa que possa identificar exclusivamente uma linha, como "código do país" em uma lista de países, você poderá usá-la.

    Alguns sistemas de banco de dados (como o InnoDB do MySQL) armazenam os registros de uma tabela no disco na ordem em que aparecem no índice PRIMARY.

  • TEXTO COMPLETO os índices são diferentes de todos os itens acima e seu comportamento difere significativamente entre os sistemas de banco de dados. Índices FULLTEXT são úteis apenas para pesquisas de texto completo feitas com a cláusula MATCH() / AGAINST(), ao contrário dos três acima - que normalmente são implementados internamente usando b-trees (permitindo selecionar, classificar ou intervalos começando da coluna mais à esquerda) ou tabelas de hash (permitindo a seleção a partir da coluna mais à esquerda).

    Onde os outros tipos de índice são de uso geral, um índice FULLTEXT é especializado, pois serve a um propósito restrito:ele é usado apenas para um recurso de "pesquisa de texto completo".

Semelhanças


  • Todos esses índices podem ter mais de uma coluna neles.

  • Com exceção de FULLTEXT, a ordem das colunas é significativa:para que o índice seja útil em uma consulta, a consulta deve usar colunas do índice começando da esquerda - não pode usar apenas a segunda, terceira ou quarta parte de um index, a menos que também esteja usando as colunas anteriores no índice para corresponder a valores estáticos. (Para que um índice FULLTEXT seja útil para uma consulta, a consulta deve usar todos colunas do índice.)