MySql

Em por

No tutorial de hoje, vamos falar de um recurso muito interessante sobre o SGBD (Sistema Gerenciador de Banco de Dados) MySQL, o QUERY_CACHE, na qual ele salva resultados dos SELECT’s já executados em que seus dados brutos não tenham sido alterados, tornando assim o tempo de resposta da query muito mais otimizada, pois ele irá buscar diretamente da memória e não do disco.

SQL_CACHE otimizando suas consultas SQL do MySql

A importância dessa otimização vai aumentando enormemente na medida em que os acessos ao seu site (e consequentemente ao seu banco de dados) crescem. E quem já teve a oportunidade de trabalhar desenvolvendo um site com muitos acessos sabe que o acesso ao banco de dados pode ser um dos maiores gargalos (pontos potenciais de atrasos na exibição do conteúdo) em seu site.

Ele pode trabalhar de 3 maneiras diferentes, no nosso my.ini dentro do grupo [mysqld]:

  • query_cache_type = 0
    Desligado
  • query_cache_type = 1
    Ligado para todas as query’s
  • query_cache_type = 2
    Ligado sobre demanda

A maneira mais indicada de você utilizar o SQL_CACHE é fazer um mapeamento da frequência de atualização das tabelas e utilizar o cache para as que não tenham uma frequência grande de atualização/inserção, para que assim, o cache lhe dê um ganho de performance, e não fique sobrecarregando o servidor tendo que invalidar muitas querys.

Sempre que estamos acessando uma determinada página e efetuando uma pesquisa, às 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, dentre outros fatores.

Mas agora, 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:

 SELECT SQL_CACHE * FROM Produtos

Não é a mesma coisa que ...

 select SQL_CACHE * from Produtos

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 prefiro 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 além do código ficar mais bonito (legível).

Ai você me pergunta (rsrsrs), então eu posso cachear todas as minhas consultas SQL e tornar meu site mais rápido? A resposta é não.

Pois 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.

Entretanto como tudo no MySQL, ele é configurável através da opção query_cache_size, valores em torno de 16M são recomendados, dependendo da capacidade do seu servidor.

Existem situações onde podemos usar esse tipo de prática, um exemplo é no Auto-Complete, ou em um campo do tipo select na qual os dados virão do BD e etc.

Caso você faça a análise e veja que a maioria das suas tabelas devem ser cacheadas, você pode usar o processo inverso, ou seja, setar a variavel query_cache_type = 1, isso fará com que todas as consultas sejam cacheadas e especificar nos selects as que não devem cachear com SELECT SQL_NO_CACHE * FROM...

Utilizar qualquer uma das funções abaixo inutiliza o cache em sua consulta:

 BENCHMARK() CONNECTION_ID() CONVERT_TZ() CURDATE() CURRENT_DATE() CURRENT_TIME() CURRENT_TIMESTAMP() CURTIME() DATABASE() ENCRYPT() with one parameter FOUND_ROWS() GET_LOCK() LAST_INSERT_ID() LOAD_FILE() MASTER_POS_WAIT() NOW() RAND() RELEASE_LOCK() SLEEP() SYSDATE() UNIX_TIMESTAMP( USER() UUID() UUID_SHORT()

Dúvidas críticas ou sugestões comentem abaixo que teremos o prazer em lhe ajudar. laugh

Veja Também:

Artigos Relacionados a categoria: MySql

Olá, deixe seu comentário para SQL_CACHE otimizando suas consultas SQL do MySql

Enviando Comentário Fechar :/

...AINDA NÃO VIU NOSSO PORTFÓLIO?

Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite e veja agora mesmo e tenha um site de qualidade para o seu negócio!

[contato]
Ver o Portfólio Agora