Olá pessoal!!

Nesse artigo irei falar sobre índices. Sempre que construímos um banco de dados, não podemos pensar somente em como armazenar os dados, mas também na velocidade em que retornaremos esses dados nas operações.
Imaginem uma consulta em um banco de dados de clientes de uma instituição bancária, nessas tabelas provavelmente teremos milhões de registros. Agora imagine você consultar somente 1 cliente no meio desses milhões de registros. Se não tiver uma organização, o tempo de resposta para essa consulta será muito alto, para isso criamos índices. Os índices funcionam como catálogos organizados, de forma a ajudar na localização dos registros dentro das tabelas. Funciona basicamente igual aos índices dos livros, como apontadores dos lugares onde estão as informações que queremos encontrar.
Em banco de dados, os índices são criados nas colunas das tabelas. Funcionarão como ponteiros ou atalhos para a localização física dos registros. Quando criamos um índice, o SGBD (Sistema Gerenciador de Banco de Dados), automaticamente criará um novo objeto, onde serão organizados e armazenados fisicamente os apontadores para os registros da(s) coluna(s) da tabela que criamos o índice.

Então, para deixar o banco de dados com um tempo de resposta satisfatório, é só criar índices em todas as colunas?
A resposta é NÃO. Como diria um amigo meu, “isso é uma faca de dois legumes”.
Como acabei de mencionar, os índices são gravados fisicamente no disco, portanto a cada registro que for catalogado no índice, este será gravado na estrutura de dados e também na estrutura do índice. Agora imaginem termos uma tabela com 200 colunas e um índice para cada coluna, totalizando 200 índices. Quando realizar um insert nessa tabela, haverão, no mínimo 201 operações de gravação (1 para os dados e outras 200 para os índices). O que pensar então se tivermos que inserir 1 milhão de registros nessa tabela. Esse é o principal motivo para não criarmos índices para todas as colunas de uma tabela.

Mas em qual coluna devemos criar um índice então?
Por padrão, quando criamos um banco de dados seguindo as boas práticas das formas normais, criaremos relacionamentos entre as tabelas. Sendo assim, a 1FN (Primeira forma normal), nos diz que devemos identificar uma chave primária na tabela. Quando criamos a chave primária ou primary key (PK) de uma tabela, essa é criada automaticamente como índice, pois ela organiza os dados fisicamente. Ainda na 1FN, temos a recomendação de criarmos outras tabelas, para não termos dados repetidos dentro de uma tabela, e para a coluna que tivermos esse relacionamento, na tabela primária ela será uma PK e na tabela secundária, ela será uma FK (foreign key), nesse caso, também devemos criar um índice nas colunas FKs.
Outro ponto importante de se ressaltar ao escolher uma coluna para criar índices, é a sua seletividade. Quanto maior a sua seletividade, ou seja, quanto mais valores diferentes a coluna tiver, melhor. Não criaremos, por exemplo, um índice numa coluna que só contém 2 tipos de valores, como Sexo (M ou F). Outro fator, é observar as colunas que são mais usadas para filtrar os dados daquela tabela, como por exemplo, colunas com datas, pois não adianta você criar um índice em uma coluna que não é frequentemente utilizada para filtrar os dados.

Bom pessoal, falamos aqui de uma forma bem genérica sobre os índices. Nos próximos artigos, irei explicar e demonstrar, como funcionam os índices na particularidade dos principais bancos de dados de mercado de hoje em dia.

Até a próxima!