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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
ASP .NET - Acessando MySQL via Entity Framework e ... - Macoratti.net