Este artigo discute índices e como você pode usá-los para melhorar o desempenho de consultas ao banco de dados MySQL.
Desempenho e índices do banco de dados
Os índices de banco de dados no MySQL permitem acelerar o desempenho de SELECT declarações de consulta. Para tabelas pequenas, um índice não ajuda muito. No entanto, se você tiver tabelas com uma grande quantidade de dados, os índices podem melhorar drasticamente o desempenho.
Os comportamentos a seguir são indicações de que as tabelas podem se beneficiar da adição de índices:
- Seu site carrega muito lentamente ou não carrega.
- Um aplicativo não consegue se conectar ao banco de dados.
- As consultas de banco de dados são armazenadas em backup.
Se você tiver algum desses problemas, analise suas consultas de banco de dados e considere adicionar índices.
Se você tiver um VPS gerenciado ou um servidor dedicado gerenciado, um tamanho de buffer de classificação aumentado também pode ajudar, além de adicionar índices. Por favor, abra um ticket no Portal do Cliente em https://my.a2hosting.com para discutir esta opção com nosso Guru Crew.
Analisando consultas de banco de dados
Para determinar quais tabelas podem se beneficiar do uso de índices, você deve analisar suas consultas de banco de dados. A EXPLICAR SELEÇÃO declaração ajuda você a fazer isso. Para analisar consultas de banco de dados, siga estas etapas:
- Faça login em sua conta usando SSH.
- No prompt de comando, digite o seguinte comando, substituindo username com o nome de usuário da sua conta do A2 Hosting e o banco de dados com o nome do banco de dados:
mysql -u username -p database
- No prompt Digite sua senha, digite sua senha. O prompt mysql> é exibido.
-
Digite o seguinte comando SQL:
EXPLAIN SELECT * FROM table_name WHERE conditions \G
Se você escreve seu próprio código de aplicativo, já conhece o SELECT instruções que você usa para recuperar dados. Se você estiver usando um aplicativo de terceiros, como WordPress ou PrestaShop, talvez seja necessário examinar o código-fonte ou os logs do banco de dados para determinar o SELECT exato instruções que são usadas para recuperar dados. -
Saída do EXPLAIN SELECT A instrução mostra como o otimizador de consulta MySQL executará a consulta. Por exemplo, considere a seguinte saída:
mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employees type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 142 Extra: Using where 1 row in set (0.00 sec)
Neste exemplo de saída:
- As possible_keys e chave os valores são ambos NULL , que indica que o MySQL não possui um índice que possa ser usado para esta consulta.
- As linhas O valor indica que o MySQL lerá 142 linhas para esta consulta. Se houver um total de 142 linhas na tabela, isso significa que o MySQL deve examinar cada linha para gerar o conjunto de resultados. Isso pode levar algum tempo para uma mesa grande.
Por outro lado, se criarmos um índice chamado index_name para o sobrenome coluna, o MySQL pode gerar a seguinte saída para a mesma consulta:
mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employees type: range possible_keys: index_name key: index_name key_len: 22 ref: NULL rows: 17 Extra: Using where; Using index 1 row in set (0.00 sec)
Como você pode ver, as possible_keys e chave Os valores indicam que o MySQL encontrou um índice que pode ser usado para otimizar a consulta. Além disso, o MySQL lerá apenas 17 linhas para gerar o conjunto de resultados, em vez de todas as 142 linhas. (Isso significa que a tabela tem 17 linhas onde o sobrenome começa com “T”.) Por último, o Extra value também indica que o MySQL usará um índice para a consulta.
Adicionar, remover e visualizar índices em uma tabela
Depois de analisar suas consultas de banco de dados e determinar onde estão os gargalos de desempenho, você estará pronto para adicionar índices. Para fazer isso, siga estas etapas:
- Faça login em sua conta usando SSH.
- No prompt de comando, digite o seguinte comando, substituindo username com o nome de usuário da sua conta do A2 Hosting e o banco de dados com o nome do banco de dados:
mysql -u username -p database
- No prompt Digite sua senha, digite sua senha. O prompt mysql> é exibido.
-
Para adicionar um índice a uma tabela, digite o seguinte comando SQL. Substituir table_name com o nome da tabela, index_name com o nome do novo índice (que pode ser o que você quiser) e table_column com o nome da coluna da tabela para a qual você deseja adicionar o índice:
ALTER TABLE table_name ADD INDEX index_name (table_column);
Embora os índices possam melhorar o desempenho, os índices também podem afetar negativamente o desempenho se houver muitos deles. Isso ocorre porque quanto mais índices uma tabela tiver, mais trabalho o MySQL deve fazer para mantê-los atualizados. O truque é encontrar o equilíbrio certo entre índices suficientes para melhorar o desempenho, mas não tantos que afetem negativamente o desempenho. -
Para remover um índice de uma tabela, digite o seguinte comando SQL. Substituir table_name pelo nome da tabela e substitua index_name com o nome do índice que você deseja excluir:
ALTER TABLE table_name DROP INDEX index_name;
-
Para exibir todos os índices de uma tabela, digite o seguinte comando SQL. Substituir table_name com o nome da tabela:
SHOW INDEX FROM table_name \G
Depois de criar um índice, você deve usar o EXPLAIN SELECT declaração novamente para ver como as consultas são afetadas. Além disso, você deve continuar monitorando o desempenho do banco de dados para ver se há melhorias. Talvez seja necessário executar uma série de testes para encontrar o número ideal de índices para seu banco de dados.
Mais informações
- Para obter mais informações sobre otimização e índices do MySQL, visite https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html.
- Para obter mais informações sobre o EXPLAIN declaração, visite https://dev.mysql.com/doc/refman/5.5/en/explain.html.