23 jan 2014
Utilizando SQL_CACHE no MySQL
Compartilharei com vocês hoje uma dica sobre o SGBD (Sistema Gerenciador de Banco de Dados) MySQL, utilizo esse fantástico banco de dados diariamente além de ser um dos SGBDs mais utilizados atualmente em servidores WEB. Graças a sua agilidade já conhecida a tempos em manipular grandes quantidades de dados na arquitetura WEB.
Já que estamos falando em WEB, sempre que estamos acessando uma determinada página e efetuando uma pesquisa as vezes nos deparamos com uma lentidão no retorno dos dados solicitados, essa demora pode ser causada por diversos fatores entre eles:
– problema com a banda de internet
– problema no servidor WEB que hospeda aquela página
– código back-end da página escrito de maneira errada, consumindo muitos recursos do banco de dados
– banco de dados mal normalizado
E por ai vai …
Mas vamos imaginar um cenário onde temos uma excelente banda de internet, servidor WEB funcionando perfeitamente, código back-end escrito de maneira correta e o banco de dados está bem normalizado, mas ainda temos uma consulta lenta, o que poderia nos ajudar ???
Para quem utiliza o MySQL temos a opção de cachear algumas consultas usando a palavra chave “SQL_CACHE” após o ‘SELECT‘, ou seja, guardar em memória consultas que são utilizadas com frequência e com a mesma sintaxe. Quando falo mesma sintaxe incluo até diferenças entre letras maiúsculas e minúsculas, exemplo:
1 |
SELECT SQL_CACHE * FROM Cliente |
Não é a mesma coisa que …
1 |
select SQL_CACHE * from Cliente |
Essas 2 instruções SQL são iguais e retornam os mesmo registros mas, serão interpretadas pelo servidor MySQL como consultas distintas, ou seja, serão executadas 2 vezes simplesmente por causa da diferença entre as letras.
Dica: Pessoalmente gosto de escrever minhas instruções SQL sempre com as palavras reservadas em letra maiúscula (SELECT, FROM, INNER JOIN, WHERE e etc ….), ajuda a evitar esses problemas com a interpretação da instrução.
Porque somente algumas consultas, imaginem se todas as consultas de um banco com 30 tabelas fossem cacheadas e diversos acessos a sua página solicitando as consultas, a memória disponível no seu servidor WEB iria estourar rapidamente e seu servidor de hospedagem iria derrubar sua página e seu banco de dados em questão de minutos …
Mas existem situações onde podemos usar esse tipo de prática, um exemplo é no Auto-Complete de uma página que trás os cliente cadastrados no banco que atendam a determinada condição de caracteres, existem plugins JQuery que nos auxiliam a desenvolver esse tipo de funcionalidade e podemos limitar a instrução SQL a somente retornar os nomes dos clientes, exemplo:
1 |
SELECT SQL_CACHE Nome FROM Cliente WHERE Nome like 'Wil%' |
Nesse exemplo estou pesquisando todos os clientes onde os 3 primeiros caracteres iniciem com ‘Wil’, claro que uma boa indexação nesse campo Nome ajuda na performance da consulta, mas vamos falar sobre índices em futuros artigos.
Bom pessoal por hoje é só , até a próxima ….