- Índices
Um índice em um banco de dados MySQL é uma estrutura organizada que ordena os valores de uma ou mais colunas em uma tabela. Essencialmente, funciona como o índice de um livro, permitindo a recuperação de dados muito mais rápida e eficiente.
7.1 Tipos de Índices
- Chave Primária (PRIMARY KEY): Identifica unicamente cada registro em uma tabela. Uma tabela pode ter apenas uma chave primária, e seus valores não podem ser duplicados.
- Índice Único (UNIQUE KEY): Garante que todos os valores em uma coluna (ou conjunto de colunas) sejam únicos. Ao contrário da chave primária, uma tabela pode ter múltiplos índices únicos.
- Índice Comum (KEY / INDEX): São índices gerais criados para acelerar consultas. Podem ser definidos usando as palavras-chave
INDEXouKEY. - Índice Full-Text (FULLTEXT): Utilizado para buscas em textos longos. Em versões do MySQL anteriores à 5.6, era suportado apenas pelo engine MyISAM. A partir do MySQL 5.6, tanto MyISAM quanto InnoDB suportam índices Full-Text. Este tipo de índice é aplicável apenas a colunas com tipos de dados
CHAR,VARCHAR,TEXTe suas variações.
Sintaxe básica para manipulação de índices:
-- Exibe todos os índices de uma tabela
SHOW INDEX FROM nome_da_tabela;
-- Adiciona um índice Full-Text a uma coluna
ALTER TABLE nome_da_tabela ADD FULLTEXT INDEX nome_do_indice (nome_da_coluna);
-- Analisa a execução de uma consulta SQL com EXPLAIN
EXPLAIN SELECT * FROM nome_da_tabela WHERE condicao;
-- Exemplo de EXPLAIN com índice Full-Text
EXPLAIN SELECT * FROM nome_da_tabela WHERE MATCH(nome_da_coluna) AGAINST('termo_de_busca');
7.2 Princípios para Uso de Índices
- Índices excessivos podem prejudicar o desempenho.
- Evite criar índices em colunas que sofrem alterações frequentes.
- Tabelas com pouquíssimos registros geralmente não se beneficiam de índices.
- Crie índices em colunas frequentemente utilizadas em cláusulas
WHEREouJOIN.
- Backups
Realizar backups é crucial para:
- Garantir a segurança e a não perda de dados importantes.
- Facilitar a migração de dados entre ambientes ou servidores.
Métodos comuns de backup em MySQL:
- Cópia direta de arquivos físicos: Copiar os arquivos de dados do MySQL diretamente do sistema de arquivos.
- Exportação via ferramentas gráficas: Utilizar ferramentas como Sqlyog para exportar os dados.
- Exportação via linha de comando (
mysqldump): Uma ferramenta poderosa e flexível para criar backups lógicos.
# Backup de um banco de dados inteiro
mysqldump -h [host] -u [usuario] -p[senha] [nome_do_banco] > /caminho/para/backup.sql
# Backup de tabelas específicas
mysqldump -h [host] -u [usuario] -p[senha] [nome_do_banco] [tabela1] [tabela2] > /caminho/para/backup_tabelas.sql
# Restaurando um backup
mysql -u [usuario] -p[senha] [nome_do_banco] < /caminho/para/backup.sql
- Normalização de Banco de Dados
A normalização é um processo de design de banco de dados que visa reduzir a redundância de dados e melhorar a integridade dos dados. Em bancos de dados complexos, um bom design é fundamental.
Consequências de um Design Ruim:
- Redundância de dados, desperdício de espaço de armazenamento.
- Dificuldades e anomalias em operações de inserção, atualização e exclusão (embora o uso de chaves estrangeiras físicas seja frequentemente evitado em favor de lógicas de aplicação).
- Baixo desempenho de consultas.
Benefícios de um Design Bem Normalizado:
- Economia de espaço de armazenamento.
- Garantia da integridade e consistência dos dados.
- Facilidade e clareza no desenvolvimento de aplicações.
Processo de Design de Banco de Dados em Desenvolvimento de Software:
- Análise de Requisitos: Entender as necessidades do negócio e como os dados serão utilizados.
- Projeto Conceitual: Criar um Diagrama Entidade-Relacionamento (E-R).
As Três Formas Normais (3FN):
- Primeira Forma Normal (1FN): Garante que todos os atributos (colunas) sejam atômicos, ou seja, indivisíveis.
- Segunda Forma Normal (2FN): Requer que a tabela esteja na 1FN e que todos os atributos não chave dependam funcionalmente da chave primária completa. Essencialmente, cada tabela deve descrever apenas uma entidade.
- Terceira Forma Normal (3FN): Requer que a tabela esteja na 2FN e que não haja dependências transitivas. Todos os atributos não chave devem depender diretamente da chave primária, e não de outros atributos não chave.
Considerações sobre Normalização e Desempenho:
Embora a normalização vise a integridade e a redução de redundância, em cenários de alta performence, pode ser necessário um balanceamento:
- Evite consultas que envolvam um número excessivo de junções (geralmente, não mais que três tabelas).
- Para otimizar o desempenho, considere a introdução controlada de redundância (campos denormalizados) para transformar consultas complexas em consultas mais simples e rápidas, ou para evitar junções em tabelas frequentemente acessadas.
- A criação de índices em campos calculados ou a pré-computação de valores pode reduzir a carga de processamento em tempo de execução.