você está aqui: Home  → Arquivo de Mensagens

Otimização de Desempenho de Aplicações PHP com MySQL

Colaboração: Marcelo Garcia

Data de Publicação: 14 de Outubro de 2004

Em uma busca na melhora do desempenho de minhas aplicações PHP x Mysql, cheguei ao resultado compilado abaixo. Este artigo esta voltado ao Mysql, o mais popular WebDatabase, porém as dicas são em sua maioria aplicavéis a maioria dos bancos no mercado.

  • Open / Close database -> Gasta-se muito tempo, banda, tempo do processador e memoria para estabelecermos uma conexão com o banco de dados. Portanto NÃO fique abrindo e fechando a conexão com o banco. Uma boa regra é abrir o banco no incio da aplicação e só fecha-lo ao termina-la.

  • Conexões permanentes (mysql_pconnect) -> Este recurso NÃO fecha a conexão com o banco mesmo apos o mysql_close ou ao sair da aplicação. Ele deixa a conexão "permanentemente" aberta, para minimizar o tempo gasto com a conexão ou reconexão com o banco de dados.

  • Dica "velha" - Crie indices para agilizar a consulta -> Programadores mais antigos sabem a diferenca de performance de uma pesquisa em uma tabela utilizando-se indice para a pesquisa. Hoje com o advento do SQL, parece que o indice caiu em desuso. Mas em bases mais "frageis" como Mysql ele ainda faz diferenca na performance de uma consulta. Procure manter indices para as suas principais pesquisas. Lembre-se :

  1. Indices farão a performace do select aumentar. Porem operações de inserção, atualização e exclusão de registros ficam mais lentas;

  2. Indices para strings grandes devem ser evitados;
  • Sempre que possivel utilize as funções Min() and Max() em suas consultas ordenadas -> Normalmente voce NÃO precisa trazer todos os registros embora seu chefe sempre o queira. Em bases muito grandies há uma degradação na performance da query. Vejo tambem em várias apostilas de php x mysql o uso indiscriminado da cláusula limit () :

    Exemplo:

      select <campo> from <table> order by <campo> limit (1);
    

    Esqueça o limit() e utilize :

      select min(<campo>) from <table>;  :-))
    

  • Utilize a função mysql_insert_id() para inserts em tabelas master/detail -> Observo muito nos "manuais" comuns da internet a seguinte pratica :

      $master_insert = "insert into <master> (fields,...) values (....)" ;   // salva o registro master
      mysql_query ($master_insert);
      $master_ID  = $mysql_query("select ID from <master> where xxx = yyy") ;   // pesquisa o ID do auto_incremento
      $master_row = mysql_fetch_row($master_id);
      $detail_ID = $master_row[0];
      mysql_query("insert into <detail> (ID, ...) values ($detail_ID,...);");
    

    ao passo que podiamos usar apenas :

      $master_insert = "insert into <master> (fields,...) values (....)" ;   // salva o registro master
      mysql_query ($master_insert);
      $detail_ID = mysql_insert_id();
      mysql_query("insert into <detail> (ID, ...) values ($detail_ID,...);");
    

    com uma query a menos :-))

  • Estruturas de dados pequenas e bem dimencionadas -> Quanto mais próximas do mundo real suas estruturas de dados forem, melhor para a aplicação. Estruturas que procuram prever "tudo" possuem muitos campos, e com tamanhos superdimensionados. Mais memoria e consequentemente mais tempo demorarão suas consultas.


 

 

Veja a relação completa dos artigos de Marcelo Garcia

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script