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

Índices MySQL 5.0 - Exclusivos vs Não Exclusivos


UNIQUE e PRIMARY KEY são restrições , não índices. Embora a maioria dos bancos de dados implemente essas restrições usando um índice. A sobrecarga adicional da restrição além do índice é insignificante, especialmente quando você conta o custo de rastrear e corrigir duplicatas não intencionais quando (não se) elas ocorrerem.

Os índices geralmente são mais eficazes se você tiver uma alta seletividade . Esta é a razão entre o número de valores distintos e o número total de linhas.

Por exemplo, em uma coluna para Número de Seguro Social, você pode ter 1 milhão de linhas com 1 milhão de valores distintos. Portanto, a seletividade é 1000000/1000000 =1,0 (embora existam raras exceções históricas, os SSNs devem ser únicos).

Mas outra coluna nessa tabela, "gênero", pode ter apenas dois valores distintos em 1 milhão de linhas. 2/1000000 =seletividade muito baixa.

Um índice com uma restrição UNIQUE ou PRIMARY KEY tem a garantia de ter uma seletividade de 1.0, então sempre será tão eficaz quanto um índice pode ser.

Você perguntou sobre a diferença entre uma chave primária e uma restrição exclusiva. Principalmente, é que você pode ter apenas uma restrição de chave primária por tabela (mesmo que a definição dessa restrição inclua várias colunas), enquanto você pode ter várias restrições exclusivas. Uma coluna com uma restrição exclusiva pode permitir NULLs, enquanto colunas em restrições de chave primária não devem permitir NULLs. Caso contrário, a chave primária e a única são muito semelhantes em sua implementação e uso.

Você perguntou em um comentário sobre usar MyISAM ou InnoDB. No MySQL, eles usam o termo mecanismo de armazenamento . Existem várias diferenças sutis entre esses dois mecanismos de armazenamento, mas as principais são:
  • O InnoDB suporta transações, então você pode optar por reverter ou confirmar alterações. MyISAM é efetivamente sempre autocommit.
  • O InnoDB impõe restrições de chave estrangeira. MyISAM não impõe nem mesmo armazena restrições de chave estrangeira.

Se esses recursos são coisas que você precisa em seu aplicativo, você deve usar o InnoDB.

Para responder ao seu comentário, não é tão simples. O InnoDB é realmente mais rápido que o MyISAM em alguns casos, então depende do mix de seleções, atualizações, consultas simultâneas, índices, configuração de buffer etc.

Consulte http:// /www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ para uma comparação de desempenho muito completa dos mecanismos de armazenamento. O InnoDB vence o MyISAM com frequência suficiente para que claramente não seja possível dizer que um é mais rápido que o outro.

Como acontece com a maioria das perguntas relacionadas ao desempenho, a única maneira de respondê-las é para seu aplicativo é testar ambas as configurações usando seu aplicativo e uma amostra representativa de dados e medir os resultados.