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

Desempenho do MySQL:como aproveitar a indexação do banco de dados MySQL


Ao longo deste tutorial, abordaremos alguns dos fundamentos da indexação. Como parte da série MySQL, apresentaremos os recursos de indexação do MySQL e o papel que ele desempenha na otimização do desempenho do banco de dados. A Liquid Web recomenda consultar um DBA antes de fazer qualquer alteração em seu aplicativo de nível de produção.

O que é indexação?


A indexação é uma estrutura poderosa no MySQL que pode ser aproveitada para obter os tempos de resposta mais rápidos de consultas comuns. As consultas do MySQL obtêm eficiência gerando uma tabela menor, chamada de índice, a partir de uma coluna ou conjunto de colunas especificado. Essas colunas, chamadas de chave, podem ser usadas para impor exclusividade. Abaixo está uma visualização simples de um índice de exemplo usando duas colunas como chave.

+------+----------+----------+
| ROW | COLUMN_1 | COLUMN_2 |
+------+----------+----------+
| 1 | data1 | data2 |
+------+----------+----------+
| 2 | data1 | data1 |
+------+----------+----------+
| 3 | data1 | data1 |
+------+----------+----------+
| 4 | data1 | data1 |
+------+----------+----------+
| 5 | data1 | data1 |
+------+----------+----------+


As consultas utilizam índices para identificar e recuperar os dados de destino, mesmo que sejam uma combinação de chaves. Sem um índice, a execução dessa mesma consulta resulta em uma inspeção de cada linha para os dados necessários. A indexação produz um atalho, com tempos de consulta muito mais rápidos em tabelas extensas. Uma analogia com livros didáticos pode fornecer outra maneira comum de visualizar como os índices funcionam.

Quando ativar a indexação?


A indexação só é vantajosa para tabelas enormes com informações acessadas regularmente. Por exemplo, para continuar com nossa analogia com o livro didático, faz pouco sentido indexar um livro de histórias infantil com apenas uma dúzia de páginas. É mais eficiente simplesmente ler o livro para encontrar cada ocorrência da palavra “tartaruga” do que configurar e manter índices, consultar esses índices e revisar cada página fornecida. No mundo da computação, essas tarefas extras relacionadas à indexação representam recursos desperdiçados que seriam mais bem aproveitados por não indexar.

Sem índices, quando as tabelas crescem em proporções enormes, os tempos de resposta sofrem com as consultas direcionadas a essas tabelas obtusas. As consultas ineficientes se manifestam em latência no desempenho do aplicativo ou do site. Geralmente identificamos essa latência usando o recurso de log de consulta lenta do MySQL. Você pode encontrar mais detalhes sobre como usar o recurso de log de consulta lenta no primeiro artigo desta série:Desempenho do MySQL:identificando consultas longas.
Uma vez que uma tabela colossal atinge seu ponto de inflexão, ela atinge o potencial de tempo de inatividade para aplicativos e sites . A realização de avaliações de rotina para o banco de dados em crescimento estabelece o desempenho ideal do banco de dados e evita as interrupções inerentes às longas consultas.

Prós da indexação MySQL vs. Contras


Há vantagens e desvantagens em usar a indexação do MySQL, e discutiremos os prós e contras significativos para sua consideração. Esses aspectos o guiarão para decidir se a indexação é uma escolha apropriada para sua situação.

Quais informações são indexadas?


Selecionar o que indexar é provavelmente a parte mais desafiadora da indexação de seus bancos de dados. Determinar o que é importante o suficiente para indexar e o que é benigno o suficiente para não ser indexado. De um modo geral, a indexação funciona melhor nas colunas que são o assunto das cláusulas WHERE em suas consultas normalmente executadas. Considere a seguinte tabela simplificada:

ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...

Se suas consultas dependem do teste da cláusula WHERE usando LAST_NAME e FIRST_NAME, a indexação por essas duas colunas aumentaria significativamente os tempos de resposta da consulta. Como alternativa, se suas consultas dependerem de uma pesquisa de ID simples, a indexação por ID seria a melhor opção.

Esses exemplos são meramente um exemplo rudimentar, e existem vários tipos de estruturas de indexação embutidas no MySQL. A página MySQL a seguir discute esses tipos de índices em mais detalhes e uma leitura recomendada para qualquer pessoa que esteja considerando a indexação:Como o MySQL usa índices

O que é um índice exclusivo?

Outro ponto a ser considerado ao avaliar quais colunas servirão como chave em seu índice é se a restrição UNIQUE deve ser usada. Definir a restrição UNIQUE imporá exclusividade com base na chave de indexação configurada. Como acontece com qualquer chave, isso pode ser uma única coluna ou uma concatenação de várias colunas. A função dessa restrição garante que não haja entradas duplicadas na tabela com base na chave configurada.



O que é um índice de chave primária?

Tão comumente invocada quanto a restrição UNIQUE, a PRIMARY KEY é usada para otimizar índices. Essa restrição garante que a PRIMARY KEY designada não possa ter um valor nulo. Como resultado, ocorre um aumento de desempenho ao executar em um mecanismo de armazenamento InnoDB para a tabela em questão. Esse aumento é devido à forma como o InnoDB armazena fisicamente os dados, colocando linhas com valor nulo na chave fora da sequência contígua com linhas que possuem valores. A ativação dessa restrição garante que as linhas da tabela sejam mantidas em ordem contígua para respostas mais rápidas.

Gerenciando índices


Agora vamos cobrir alguns dos fundamentos da manipulação de índices usando a sintaxe do MySQL. Nos exemplos, incluiremos a criação, exclusão e listagem de índices. Lembre-se de que esses exemplos têm entradas de espaço reservado para palavras-chave específicas. Essas palavras-chave são autoexplicativas por natureza para facilitar a leitura, e abaixo está um resumo delas.

Como listar/mostrar índices


As tabelas podem ter vários índices. O gerenciamento de índices inevitavelmente exigirá a capacidade de listar os índices existentes em uma tabela. A sintaxe para visualizar um índice está abaixo.

SHOW INDEX FROM tableName;

Criando índices


A criação de índice tem uma sintaxe simples. A dificuldade está em determinar quais colunas precisam de indexação e se é necessário impor a exclusividade. Abaixo vamos ilustrar como criar índices com e sem restrições PRIMARY KEY e UNIQUE.

Como mencionado anteriormente, as tabelas podem ter vários índices. A indexação múltipla é útil para criar índices sintonizados com as consultas exigidas pelo seu aplicativo ou site. As configurações padrão permitem até 16 índices por tabela, aumenta esse número, mas geralmente é mais do que o necessário. Os índices podem ser criados durante a criação de uma tabela ou adicionados à tabela como índices adicionais posteriormente. Veremos os dois métodos abaixo.

Exemplo:criar uma tabela com um índice padrão

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
INDEX ( ID )
);


Exemplo:criar uma tabela com índice exclusivo e chave primária

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
PRIMARY KEY (ID),
UNIQUE INDEX ( ID )
);


Exemplo:adicionar um índice a uma tabela existente

CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);

Exemplo:adicionar um índice a uma tabela existente com chave primária

CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);

Excluindo índices


Ao gerenciar índices, você pode achar necessário remover alguns. A exclusão de índices também é um processo muito simples, veja o exemplo abaixo:

DROP INDEX indexName ON tableName;

Há muitas maneiras de otimizar seu banco de dados para uma verdadeira eficiência. Se você quiser aprender mais ou converter os tipos de mecanismos de busca disponíveis no MySQL, leia nosso tutorial MyISAM vs. InnoDB. Ou, se você precisar de bancos de dados de alto desempenho, confira nossa página do produto MySQL para ver diferentes opções.
Navegação da série<>