O banco de dados não é mágico: por que a indexação é importante
Você conhece esse sentimento, certo? Você inicia um novo recurso, tudo fica ótimo em sua máquina e, em seguida, ele atinge a produção. De repente, as páginas estão carregando lentamente, os usuários estão reclamando e seu belo endpoint da API está divulgando. Você mergulha nos troncos, arranha a cabeça e, muitas vezes, o culpado não é a sua nova estrutura de front -end ou aquele microsserviço complexo; É o humilde banco de dados, fazendo o seu melhor, mas lutando sob a carga. Muitas vezes, tratamos nossos bancos de dados como caixas mágicas que sabem ser rápidas, mas elas realmente precisam de uma pequena ajuda de nós. Essa ajuda, meu amigo, geralmente vem na forma de indexação. Não é fascinante, não é a tendência mais recente, mas entender a indexação é uma superpotência para qualquer desenvolvedor que se preocupe com o desempenho. Vamos recuar a cortina sobre por que esse conceito fundamental é tão crucial e como usá -lo corretamente. O que é um índice, afinal? Pense em um livro físico. Se você quiser encontrar todas as menções do “desempenho do banco de dados”, não começaria na página um e lia a coisa toda, seria? Não, você viraria direto para o índice na parte de trás. Ele lista palavras -chave e as páginas onde elas aparecem, levando você às informações muito mais rapidamente. Um índice de banco de dados funciona de uma maneira muito semelhante. É uma tabela de pesquisa especial que o banco de dados cria e mantém. Em vez de examinar todas as fileiras de uma tabela para encontrar o que está procurando, um índice permite que o banco de dados salte diretamente para as linhas relevantes, bem como o nosso índice de livros. Isso é especialmente verdadeiro para tabelas grandes com muitos registros. A dor de consultas lentas Vamos imaginar que você tenha uma mesa de usuários com, digamos, um milhão de registros. Uma tarefa comum pode ser buscar um usuário pelo endereço de e -mail: selecione * dos usuários onde email = ‘alice.smith@example.com’; Digite o modo de saída do modo de tela cheia sem um índice na coluna de email, seu banco de dados deve executar uma “varredura completa”. Isso significa que ele lê todas as fileiras, do primeiro ao milionésimo, verificando a coluna de email até encontrar ‘Alice.smith@example.com’. Para uma consulta, talvez esteja tudo bem, mas imagine isso acontecendo centenas ou milhares de vezes por segundo. Seu servidor estará suando e seus usuários clicarão em outro site. Agora, adicione um índice à coluna de email: crie índice idx_users_email nos usuários (email); Digite o modo de saída do modo de tela cheia de tela cheia ou, se você estiver usando o Laravel, provavelmente fez isso em uma migração: schema :: create (‘usuários’, function (blueprint $ tabela) {$ tabela-> id (); $ tabela-> string (‘name’); $ tabela-> string (email ‘)-> (); () // string (nome’); $ tabela-> timestamps (); Digite o modo de saída do modo de tela cheia com IDX_USERS_EMAIL no lugar, quando você executa essa consulta selecionada, o banco de dados pode usar o índice para localizar rapidamente a linha exata, pulando completamente a digitalização da tabela completa. Essa diferença pode transformar uma consulta de 500 milissegundos em 5 milissegundos. Essa é uma grande vitória para a experiência do usuário e a carga do servidor! Quando e onde usar índices, não se trata apenas de cláusulas, embora sejam um driver primário. Considere a indexação de colunas que são frequentemente usadas nessas situações: onde cláusulas: como vimos, este é o caso de uso mais comum. Junte -se às condições: quando você está vinculando tabelas, como usuários.id = ordens.user_id, indexando o user_id na tabela de pedidos (e ID nos usuários, que geralmente é uma chave primária e, portanto, indexada) é crucial para junções rápidas. Ordem por cláusulas: se você costuma classificar os resultados de uma determinada coluna, um índice poderá ajudar o banco de dados a retornar os resultados ordenados muito mais rapidamente. Restrições exclusivas: elas criam automaticamente um índice, garantindo que nenhum valores duplicados possa ser inserido na coluna. The Catch: quando não indexar bem, os índices são ótimos, mas não são magia livre. Existem trocas: espaço de armazenamento: os índices ocupam espaço em disco. Para mesas enormes, isso pode ser significativo. Desempenho de gravação: Toda vez que você inserir, atualizar ou excluir uma linha, o banco de dados também precisa atualizar qualquer índice nessa tabela. Mais índices significam mais trabalho, o que pode desacelerar as operações de gravação. Se uma tabela é escrita principalmente e raramente lida, a indexação excessiva pode prejudicar mais do que ajudar. Colunas de baixa cardinalidade: Não indexe colunas com muito poucos valores exclusivos, como uma coluna BOOLEAN IS_Active. Se uma coluna tiver apenas dois valores possíveis (verdadeiro/false), um índice não é muito útil porque o banco de dados ainda precisaria verificar metade da tabela, e uma varredura completa pode até ser mais rápida. Over-indexing: Adicionar muitos índices pode realmente degradar o desempenho. O banco de dados precisa decidir qual índice usar e, às vezes, muitas opções podem dificultar seu trabalho. Uma dica rápida: o poder de explicar se você está se perguntando se seu índice está realmente sendo usado ou por que uma consulta ainda está lenta, alcance para explicar. A maioria dos sistemas de banco de dados, como MySQL ou PostgreSQL, possui este comando: explique selecione * de usuários onde email = ‘alice.smith@example.com’; Digite o modo de saída do modo de tela cheia, a saída mostrará o “plano de execução” da sua consulta. Ele informa se um índice foi usado, que tipo de varredura foi executado (varredura de tabela completa vs. varredura) e quão caro é a operação. Aprender a ler a saída Explique é como obter uma visão de raios-X para o seu banco de dados. É um divisor de águas. Takeaways Então, o que aprendemos? Seu banco de dados não é uma caixa preta mágica que apenas sabe ser rápida. É uma ferramenta poderosa que você precisa configurar e guiar. Os índices são uma ferramenta fundamental no seu kit de ferramentas de desempenho. Use -os com sabedoria, especialmente em colunas frequentemente usadas em onde, junte -se e encomenda por cláusulas. Entenda as compensações: os índices aumentam o desempenho da leitura, mas podem desacelerar um pouco as gravações e consumir espaço em disco. E nunca esqueça o comando explicar; É seu melhor amigo para descobrir o que seu banco de dados está realmente fazendo sob o capô. Uma pequena previsão de indexação pode economizar muita dor de cabeça e manter seus aplicativos rápidos e seus usuários felizes.
Fonte