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

Otimização de banco de dados MYSQL usando indexação


Em relação às questões de índices, um índice não é apenas desejável, mas é necessário para "acelerar" as coisas. Pelo que entendi (em termos "leigos"), a função de um índice é acelerar buscas e recuperações de dados dentro de uma tabela.

Motivos para usar índices:

  1. Identifique exclusivamente cada linha em cada tabela (a chave primária é um índice, afinal)
  2. Os índices são classificados (mesmo que os dados não sejam)
  3. Acelerar pesquisas e filtros:Um índice torna a recuperação dos dados mais rápida, pois "segura" a colocação dos dados na tabela (ele "indica" os dados que você deseja recuperar). Também torna mais fácil para o mecanismo de banco de dados filtrar os dados (é sempre mais rápido e simples filtrar classificado dados que embaralhados dados)
  4. Otimize a maneira como os dados são recuperados ao usar tabelas relacionadas:cada chave estrangeira deve ser indexada para acelerar as consultas que envolvem relações de chave primária - estrangeira

Algumas "regras de polegar" que uso para decidir quais campos precisam ser indexados:

  • Toda chave primária é indexada (o óbvio one:uma chave primária deve ser única e não nula)
  • Toda chave estrangeira deve ser indexada (para tornar as relações de chave primária - estrangeira eficientes)
  • Todos os campos numéricos ou de data em que preciso realizar pesquisas devem ser indexados. Dito isso, tento evitar double (ou qualquer outro tipo numérico de ponto flutuante) a serem indexados, pois geralmente são usados ​​para armazenar valores que não devem ser pesquisados.
  • Cada char ou varchar campo no qual preciso realizar pesquisas deve ser indexado. Tente evitar índices em text campos, pois eles podem conter valores muito grandes neles.
  • Evite indexação binária (blob ) campos... não faz sentido
  • Não cair na tentação de indexar tudo. Tome seu tempo para decidir quais campos devem ser indexados e quais campos não devem ser indexado.