MySQL - Melhorando o desempenho e evitando problemas


 Neste artigo veremos como melhorar o desempenho e evitar problemas ao usar o banco de dados MySQL.

Hoje veremos como podemos melhorar o desempenho e evitar problemas na utilização do banco de dados MySQL.

1 - Ao criar uma Store Procedure não use o mesmo nome no parâmetro de consulta na cláusula Where que o nome do campo na consulta
DELIMITER $$
CREATE PROCEDURE `getCategoriasPorId`(IN CategoryID INT)  
BEGIN  
   SELECT CategoryID,CategoryName FROM categories WHERE CategoryID=CategoryID;    
END;
$$
DELIMITER ;
 DELIMITER $$
 CREATE PROCEDURE `getCategoriasPorId`(IN CategoriaID INT)  
 BEGIN  
    SELECT CategoryID,CategoryName FROM categories WHERE CategoryID=CategoriaID;  
 END;
 $$
 DELIMITER ;

 

Vai retornar todos os registros O nome do parâmetro agora é diferente do nome do campo

Será retornado todos os registros pois o MySQL interpreta o valor do campo como o valor do parâmetro , o que é similar a 1=1

2 - Utilize o mesmo tipo de dados na cláusula Where da consulta
SELECT CategoryID,CategoryName FROM categories WHERE CategoryID > '2';     
 
  SELECT CategoryID,CategoryName FROM categories WHERE CategoryID > 2 ;   

 

Tipo de dados de CategoryID é int e parâmetro é uma  string   CategoryID é do mesmo tipo de dados que o parâmetro

O desempenho será impactado pois o MySQL vai precisar de memória extra para a fazer a conversão do tipo.

3 - Utilize a cláusula EXISTS
   if(select count(*) from categories) > 0        
  
   if EXISTS(select count(*) from categories) > 0 

 

Isso melhora o tempo de resposta da consulta.

4 - Evite usar funções em colunas indexadas

select CategoryName from categories Where UPPER(CategoryName) LIKE `J%`
     
   select CategoryName from categories Where CategoryName LIKE `J%`

A utilização da função irá anular a finalidade da coluna indexada.

5 - Prefira usar ENUM a VARCHAR em colunas com múltiplos valores (ex. gênero, status, etc)
-- VARCHAR  
CREATE TABLE Aluno(  
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,  
nome VARCHAR(50) NOT NULL,  
sexo VARCHAR(50)  
)ENGINE=MyISAM;       
-- ENUM  
CREATE TABLE Aluno(  
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,  
nome VARCHAR(50) NOT NULL,  
sexo ENUM('Masculino','Feminino')  
)ENGINE=MyISAM;

O tempo de resposta é melhor com ENUM.

6 - Evite usar SELECT *

Se você estiver selecionando apenas algumas colunas de uma tabela, evite usar SELECT *.

Embora seja mais fácil escrever isso vai impactar o desempnho da consulta. Ao selecionar apenas as colunas que você precisa, você esta reduzindo o tamanho da tabela de resultados, reduzindo o tráfego de rede, e, além disso, aumentando o desempenho.

7 - Evite usar a cláusula GROUP BY sem usar funções agregadas

SELECT CategoryID, Description, CategoryName FROM categories GROUP BY CategoryName;  

SELECT CategoryName, count(*) as count FROM categories GROUP BY CategoryName; 

A consulta sempre vai recuperar o primeiro registro pela coluna agrupada, de modo que será diferente, se esperarmos todos os registros, que são baseados em uma coluna agrupada.

E estamos conversados...

'E o testemunho é este: que Deus nos deu a vida eterna; e esta vida está em seu Filho.(Jesus Cristo)'
1 João 5:11

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti