IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Optimisation de scripts PHP/MySQL [Débat]


Sujet :

PHP & Base de données

Vue hybride

DgG Optimisation de scripts... 16/11/2003, 00h03
stephane eyskens conseils 16/11/2003, 00h44
psychoBob Tiens justement ! J'ai une... 20/06/2006, 01h00
Yogui Salut Si je ne m'abuse, un... 20/06/2006, 01h58
psychoBob Donc à te lire, je vire les... 20/06/2006, 14h17
hachesse Eviter toute opération... 16/11/2003, 02h45
libuma Bonjour, J'ai fais un site... 15/06/2008, 15h26
Yogui Salut Tu es en train de... 15/06/2008, 15h44
libuma C'est le pourquoi du comment... 15/06/2008, 16h52
Yogui Le mieux est d'utiliser des... 15/06/2008, 17h09
Invité oui c'est problématique !! 15/06/2008, 21h40
libuma une chose est sure , on évite... 16/06/2008, 00h07
King Bradley Bonjour tout le monde, Je... 18/11/2013, 15h30
papajoker Une connexion prend plus de... 18/11/2013, 16h09
King Bradley Merci beaucoup pour ces... 18/11/2013, 16h14
ABCIWEB 1/ Donc concernant... 18/11/2013, 20h26
King Bradley Oui, je vois ça ^^ Merci à... 20/11/2013, 19h59
sekaijin 1) attention pconnect c'est... 18/11/2013, 17h05
djibxav Apprendre à faire des... 19/11/2003, 14h59
DgG Ouai c'est bien vrais tout ça... 03/12/2003, 14h30
VincentMetz passage PHP / HTML ? 12/12/2003, 02h21
MagicKing Si tu utilise des echo avec... 12/12/2003, 23h49
Dozer Utilier les décalages à... 13/12/2003, 13h22
Dozer Il arrive fréquement que l'on... 13/12/2003, 13h36
DgG Ouaw génial, je connaisait... 17/12/2003, 00h55
Dozer La syntaxe officielle c'est... 17/12/2003, 14h57
matN59 Re: Optimisation de scripts... 18/12/2003, 10h20
iubito pour le <?=$var?> dit plus... 28/12/2003, 20h25
_Gabriel_ salut, les calculs... 29/12/2003, 10h51
iubito peux-tu préciser un peu, je... 29/12/2003, 10h59
Sergejack Est-ce qu'on peut optimiser... 19/07/2006, 18h43
Blustuff J'ai un résumé très simple :... 19/07/2006, 19h11
ePoX En termes plus pratiques un... 03/08/2006, 00h16
sigap parce le processeur PHP... 07/08/2006, 00h23
Yogui Salut Nous avons un... 07/08/2006, 00h29
Blustuff Ce tutoriel est parfait pour... 07/08/2006, 03h43
Invité apprenez aussi à dénormaliser... 10/10/2006, 14h25
Yogui Oui, enfin, faites attention... 11/10/2006, 00h33
Invité Oui en effet , c'est vrai on... 11/10/2006, 10h39
iubito Autre chose : bien lire la... 29/12/2003, 11h02
matN59 heu, tu es sur que cela... 29/12/2003, 11h09
_Gabriel_ j'ai aussi vu l'inverse et... 29/12/2003, 11h17
iubito je vois toujours pas le... 29/12/2003, 11h42
_Gabriel_ parce qu'il n'y en as pas.... 29/12/2003, 11h46
keusty78 j'ai aussi vus et entendu... 14/03/2011, 20h32
stealth35 ca depend de ca que tu veux... 14/03/2011, 21h18
keusty78 oui c'est vrais stealth35 mai... 14/03/2011, 22h55
sekaijin ne faite JAMAIS ça Une des... 15/03/2011, 11h49
mslao Un petit ajout concernant... 07/06/2013, 23h56
sekaijin Bonjour, in_array n'a pas... 08/06/2013, 11h49
iubito ah ça y est j'ai capté, tu... 29/12/2003, 11h46
iubito un conseil pour clarifier les... 29/12/2003, 11h47
_Gabriel_ j'ai pas forcement dit que... 29/12/2003, 11h58
iubito OK. Dans la même optique... 29/12/2003, 12h05
iubito et pour des echo multiples,... 29/12/2003, 12h09
_Gabriel_ salut, et marche aussi et... 29/12/2003, 12h27
iubito Si on écrit en ligne y'a plus... 29/12/2003, 12h32
ackan Salut vous êtes au... 18/04/2006, 22h02
Dozer Another 30/12/2003, 01h58
matN59 Re: Another 30/12/2003, 10h49
iubito je suis d'accord, il faut... 30/12/2003, 10h54
Dozer Je suis un peu mort de rire,... 30/12/2003, 15h08
matN59 on est bien d'accord dans ce... 30/12/2003, 15h42
Tuxxy En parlant des SELECT *, si... 11/01/2004, 12h51
Nonothehobbit Une très bonne optimisation... 12/01/2004, 11h48
iubito j'ai pas tout compris là ton... 12/01/2004, 11h57
Nonothehobbit C'est pour le cas où on... 12/01/2004, 12h19
iubito ah ok yé comprend mieux:)... 12/01/2004, 12h29
Tuxxy ben d'un coté tes objets... 12/01/2004, 13h34
Nonothehobbit Pour ma part je charge toutes... 12/01/2004, 13h44
iubito intéressant ce que tu dis là... 12/01/2004, 14h24
Tuxxy Ok j'avais pas vu ca comme ca... 12/01/2004, 14h37
Tuxxy Re: Another 18/01/2004, 18h56
iubito Pendant mes longues heures... 18/01/2004, 21h33
Tuxxy Youpi! C'est vraiment génial... 18/01/2004, 22h05
iubito Si vous avez d'autres choses... 18/01/2004, 22h42
Tuxxy Au fait une question. Quand... 18/01/2004, 23h13
iubito en fait il faut bien... 18/01/2004, 23h18
matN59 voila je fais un peu de pub... 02/03/2004, 00h31
davidc2 simplement, à chaque... 07/03/2004, 21h31
DgG Un truck aussi, faut essayer... 12/03/2004, 18h28
melmel Est-ce que la fonction... 26/03/2004, 12h40
iubito De toute façon dès que ta... 26/03/2004, 15h29
iubito Pour écrire en plus propre... 01/04/2004, 20h42
DgG Sinon, ya la mise en cache... 29/05/2004, 22h10
emrys Je crois qu'on s'est un peu... 18/06/2004, 14h48
Celelibi emrys, il a déjà été dit que... 19/06/2004, 04h28
iubito Aller, un petit coup... 19/06/2004, 08h41
erzebet Optimisation 01/07/2004, 19h15
iubito Re: Optimisation 01/07/2004, 19h56
m@ au niveau de l'appel des... 01/07/2004, 20h55
erzebet Merci beaucoup de vos... 01/07/2004, 23h15
iubito lisibilité et réutilisation... 02/07/2004, 04h27
m@ pour moi le seul moment où la... 02/07/2004, 10h38
erzebet Ah oui quand même :)) Je... 02/07/2004, 11h58
m@ la première, mais là encore... 02/07/2004, 12h03
iubito m@ > pour faire comprendre,... 02/07/2004, 12h25
m@ iubito >> c'est promis je le... 02/07/2004, 12h32
erzebet Merci encore, pour vous... 02/07/2004, 17h21
iubito le mieux c de créer une... 02/07/2004, 19h18
Hyoga kun salut, le mysql_close(); à... 02/07/2004, 21h08
iubito normalement non, php ferme... 02/07/2004, 22h34
erzebet mais par contre ce n'est pas... 03/07/2004, 19h01
iubito c pas un truc mysql_pclose... 03/07/2004, 19h28
erzebet oui alors euh oui moi j'ai... 03/07/2004, 21h01
iubito pour la fonction... le... 03/07/2004, 22h09
erzebet tout a fait, d'ailleurs... 04/07/2004, 13h35
cedricgirard Et pourquoi tu ne demanderais... 08/07/2004, 17h06
iubito fait des tests comme sur mon... 09/07/2004, 09h37
Linie Bon ben moi j'arrive comme un... 27/07/2004, 15h41
Swoög en fait, je pense que c'est... 27/07/2004, 16h03
-COil- C'est des queues de cerises..... 28/07/2004, 00h14
cedricgirard Moi aussi j'ai eu ma période... 28/07/2004, 00h29
Linie Merci pour les lien. Mais... 28/07/2004, 10h57
cedricgirard fr au début des liens, ça... 28/07/2004, 11h00
Maya_vega ben à chaque tour de boucle... 11/08/2004, 17h59
Maya_vega Je tiens à dire merci pour ce... 11/08/2004, 18h20
lunart optimisation de mon code <->... 12/08/2004, 11h07
iubito j'ai pas bien compris ton... 12/08/2004, 11h35
lunart Je demande de tout afficher à... 12/08/2004, 18h16
Swoög CSS est extrêment smple à... 12/08/2004, 18h18
divine99 Dans une fonction, est-ce... 29/05/2006, 11h00
Yogui Salut Non, appeler unset()... 29/05/2006, 11h55
divine99 Donc on a donc tout intérêt à... 29/05/2006, 12h08
lunart est ce que le language peut... 12/08/2004, 18h24
cedricgirard Bien sur que si echo... 12/08/2004, 18h29
cedricgirard Les CSS rendent les pages bcp... 12/08/2004, 18h31
lunart Selon toi cedric le code... 12/08/2004, 18h37
Faaalllllling Plutot Firebird (enfin... 12/08/2004, 20h25
iubito et y'a un </tr> au début, ça... 12/08/2004, 20h49
lunart merci pour les conseils... 12/08/2004, 23h49
teto Très intéressant ce post !... 07/09/2004, 19h49
despe974 Bonjour à tous et à toutes,... 13/09/2004, 14h03
teto C'est une question... 14/09/2004, 19h01
CynO Mysql ! Faut faire des... 28/09/2004, 11h45
cedricgirard Ma solution : utiliser des... 28/09/2004, 12h00
CynO Le include_once ne se charge... 28/09/2004, 13h15
cedricgirard Non, j'ai mal expliqué : tu... 28/09/2004, 14h50
zamanika salut, J'ai appris pleins... 06/10/2004, 21h57
cedricgirard Qu'est ce qui te pousse à... 06/10/2004, 23h20
zamanika euh... ben comment :oops: ??? 06/10/2004, 23h22
cedricgirard Classiquement - note... 06/10/2004, 23h36
zamanika J'ignorai l'existence de... 07/10/2004, 00h06
zamanika alors je viens de tester,... 07/10/2004, 00h24
cedricgirard Tout bon! :D Toutefois, si... 07/10/2004, 00h34
iubito un tableau va prendre... 07/10/2004, 07h44
zamanika Merci pour vos lumières ! 07/10/2004, 11h48
nic58 Salut, à votre avis il... 30/10/2004, 20h13
Caerbannog J'en sais rien... Mais... 21/11/2004, 21h33
Swoög Salut ! à ce niveau, c'est... 21/11/2004, 21h36
Caerbannog Ouais ça change rien por les... 21/11/2004, 21h40
cedricgirard et moi la 3, mais bon les... 21/11/2004, 21h46
iubito moi c'est la 2. De toute... 21/11/2004, 22h37
Kioob ça, ça m'a toujours posé... 22/11/2004, 10h24
genova J'avoue que je suis méga... 22/11/2004, 20h09
Grey Bonjour, j'aimerais savoir si... 21/12/2004, 20h50
Kioob Hello, oui les... 21/12/2004, 21h14
Grey quand je parle de retirer... 21/12/2004, 21h18
Kioob Sur mon forum j'ai un cache... 21/12/2004, 21h21
analysiz Tous les commentaires ne sont... 23/12/2004, 18h54
montou Salut, aurais tu de bons... 24/12/2004, 10h46
Grey En fait, ça se passe... 25/12/2004, 15h49
analysiz Pour les bases de données, il... 26/12/2004, 16h44
Noteirak si vous avez deux boucles... 26/12/2004, 19h12
Hubert Roksor Noteirak j'ai bien peur que... 26/12/2004, 20h16
Noteirak je m'excuse, je me suis... 26/12/2004, 20h59
genova Petite question... 27/12/2004, 01h23
Kioob Je ne sais pas si cela a... 27/12/2004, 01h35
Hubert Roksor Non, le second ne le fait pas... 27/12/2004, 01h52
Caerbannog Un truc évident, mais auquel... 06/02/2005, 10h31
Tiberizz Bonjour, J'ai besoin... 22/02/2005, 14h25
fragmonster Essaye plutôt... 22/02/2005, 16h02
Tiberizz Merci de ta réponse. En... 22/02/2005, 16h14
vynarim Bonjour, J'ai un script... 02/03/2005, 14h43
genova Optimise ton script ... 02/03/2005, 23h29
vynarim L'optimisation n'est pas... 03/03/2005, 10h53
genova Tu peux faire un copie colle... 03/03/2005, 15h45
Celelibi J'ai eut besoin il y a... 13/03/2005, 22h52
genova Benchmark est ton ami dans ce... 14/03/2005, 02h10
Kioob Si tu utilises le format DATE... 14/03/2005, 02h37
winzou DATETIME plutot non ? Sinon... 16/03/2005, 22h48
Blustuff Bonsoir, Si je veux... 17/03/2005, 03h03
genova Si tu utilises énormément de... 17/03/2005, 14h33
Blustuff J'ai du mal m'exprimer. Je... 17/03/2005, 15h37
menkajunan effectivement, c assez... 21/03/2005, 13h56
titoon ?? C'est surtout parce que... 07/04/2005, 13h01
Invité Salut, j'ai une question... 15/04/2005, 16h43
131 Pourquoi alors ne pas... 26/05/2005, 16h02
jcachico A chaque tour dans la boucle... 13/06/2005, 11h25
titoon Pour info, il existe en PHP... 14/06/2005, 10h47
praentitong oui mais il arrive qu'on ne... 16/06/2005, 14h58
Blustuff Si j'ai deux tables A et B,... 27/06/2005, 00h02
Squallynou Bonjour, Interessant ce... 31/07/2005, 05h58
Blustuff Il est très difficile de... 02/08/2005, 19h12
Squallynou Bonjour, Un autre petit... 10/08/2005, 05h06
hugo123 Ce petit script permet de... 12/08/2005, 17h01
Tchinkatchuk un select max serait peut... 12/08/2005, 17h19
poof65 un select count&#40;*&#41;... 12/08/2005, 17h21
Tchinkatchuk oui, en cas d'un id manquant... 12/08/2005, 17h30
thibob et SELECT MAX(id) FROM table... 12/08/2005, 19h32
Taum Salut, Il me semble avoir lu... 12/08/2005, 22h46
Blustuff Petite remarque amusante. La... 20/08/2005, 16h16
shadeoner redimenssionement image 25/08/2005, 15h05
bollob Bonjour, j'ai une table... 30/08/2005, 02h40
genova Pour ce type de configuration... 01/09/2005, 09h07
Thanaroth Je pense qu'on devrait... 06/09/2005, 14h28
sekaijin en fait en théorie tous les... 06/09/2005, 16h11
genova Il faudrait testern j'ai déjà... 06/09/2005, 22h02
sekaijin c'est plus compliqué que... 07/09/2005, 17h23
genova Oui en fait tu as... 07/09/2005, 21h31
Rom_1 Bon topic, juste un point... 07/09/2005, 23h16
genova Les bases de données sont... 08/09/2005, 18h53
FFF je viens de surfer sur ce... 27/11/2005, 02h00
siddh c'est effectivement un plus... 27/11/2005, 02h05
Seb33300 A prioris ça n'a pas été... 09/06/2007, 16h13
Yogui Pour info, MySQL propose la... 09/06/2007, 23h18
Seb33300 Manuel Mysql Donc dans... 10/06/2007, 19h56
FFF je ne suis pas d'accord avec... 27/11/2005, 11h05
siddh je me suis mal exprimé. 27/11/2005, 11h19
FFF Oui en fait j'ai pas lu toute... 27/11/2005, 11h22
siddh oui, c'est un plus mais faut... 27/11/2005, 11h28
FFF ça a l'air intéressant, tu... 27/11/2005, 11h31
siddh Pdo est une couche... 27/11/2005, 11h41
FFF Autre astuce : 27/11/2005, 11h51
FFF je ne vois pas le rapport... 27/11/2005, 11h53
siddh ben tu met ca dans un objet... 27/11/2005, 12h13
FFF ok je viens de lire une page... 27/11/2005, 12h30
siddh oui tu met tes objets en... 27/11/2005, 12h40
FFF DSL je suis pas convaincu par... 27/11/2005, 12h47
FFF pour expliciter ce que je... 27/11/2005, 13h33
FFF une autre astuce de... 29/11/2005, 15h21
Kioob Tu t'avances beaucoup je... 29/11/2005, 21h02
FFF Oui mais c'est fondé !! ... 30/11/2005, 13h14
Kioob Et bien ça n'engage que moi,... 01/12/2005, 01h48
FFF pour le mysql_pconnect(), si... 01/12/2005, 11h37
Kioob Bon, je ré-explique : les... 01/12/2005, 12h21
FFF Ben écoute puisque tu as... 01/12/2005, 12h48
kankrelune Et bien détrompe toi... aussi... 05/12/2005, 16h33
dasdeb Le problème est de définir ce... 05/12/2005, 22h02
kankrelune Chaines courtes entre quote... 06/12/2005, 17h01
Blustuff Je reviens au résumé du post,... 20/12/2005, 15h10
Death83 J'ai fait quelque bench et... 15/01/2006, 17h12
ePoX Pour ce qui est de... 15/01/2006, 18h46
Halukard est ce qu'il y a une fonction... 15/01/2006, 21h54
siddh oui d'ailleurs ePoX est au... 15/01/2006, 21h56
Halukard merci beaucoup :wink: 15/01/2006, 22h04
Death83 Je me suis fait un petit... 16/01/2006, 01h27
Kioob Death83 : pour "mesurer" les... 16/01/2006, 11h21
ePoX C'est quoi sa les opcode ? 16/01/2006, 18h20
GregPeck Ton script php avant d'être... 17/01/2006, 00h28
Death83 Je voulais mesurer... 17/01/2006, 08h58
Kioob Et justement, comme tu ne... 17/01/2006, 10h15
XtofRoland ++i est legerement plus... 06/02/2006, 18h14
Yogui Ouaip, je confirme. 07/02/2006, 12h39
chaced Un truc tout bete... 09/02/2006, 17h48
Kioob yep, mais ça c'est bien... 09/02/2006, 18h20
Yogui Troll spotted ;)... 09/02/2006, 21h09
chaced Je sens un bon gain en perf,... 10/02/2006, 19h06
XtofRoland Re: Optimisation de scripts... 16/02/2006, 12h52
zaventem Une optimisation qui peut... 18/03/2006, 02h03
nomad2 bonjour: svp mon français est... 26/04/2011, 15h14
tse_jc Bonjour, Cette... 30/07/2012, 02h43
tse_jc Je rajoute un lien discuté... 31/07/2012, 08h43
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    DgG
    DgG est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 22
    Par défaut Optimisation de scripts PHP/MySQL
    Salut ! J'ai été confronté avec un site qui était hebergé sur un serveur dédier à la lenteur d'execution des page en Php.
    En étudiant les documentation Php MySQL nous avons réussit a accelerer considerablement la vietesse et augmenter le nombre d'internaute sconnectés en même temps sur le site.
    Donc voila, je vous propose que l'on se disent des techniques pour accelerer Php.

    Je commence : 8)
    - Simplifier au maximum les boucle while(...).
    - Utiliser le moin de variables possible, en effet tout les variables son stocké dans la ram (nan ?).
    - Réduire au maximum le nombre d'acces à une base de donnée (c'est important ça)
    Par exemple lorsque que vous avez une adition à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    au lieu de faire
    $q=mysql_query("SELECT nombre FROM table WHERE condition");
    $r=mysql_fetch_array($q);
    $nombre=$r["nombre"] + $valeur;
    msql_query("UPDATE table SET nombre = $nombre WHERE condition");
     
    On ecrit cela :
    mysql_query("UPDATE table SET nombre = nombre + $valeur WHERE condition");
    Et oui ça mache ça !!
    -Optimiser la structure de vos table MySQL(voir doc)
    Enfin, regardez dans les documentations si il ny a pas une fonction Php ou MySQL qui remplaceraies votre script de bourin. De cette sorte, vous ne ferez plus soufrir votre serveur.

    A vous maintenant de donner vos astuces, ou de poser des questions.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Par défaut conseils
    Je rajoute ceci:

    - évitez les "select *" lorsque vous ne devez ramener qu'une ou deux colonnes de la table.

    - Mettez des index sur les colonnes qui sont souvet dans les clauses "where", bon, faut pas non plus mettre des index à tout va car pour chaque insertion, l'index doit être mis à jour, d'où perte de performance. Il faut uniquement mettre des index sur des grosses tables et qui sont requêtées à 85% VS mise à jour.

    - évitez les variables intermédiaires inutiles

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Par défaut
    Citation Envoyé par stephane eyskens
    Je rajoute ceci:

    - évitez les "select *" lorsque vous ne devez ramener qu'une ou deux colonnes de la table.

    - Mettez des index sur les colonnes qui sont souvet dans les clauses "where", bon, faut pas non plus mettre des index à tout va car pour chaque insertion, l'index doit être mis à jour, d'où perte de performance. Il faut uniquement mettre des index sur des grosses tables et qui sont requêtées à 85% VS mise à jour.

    - évitez les variables intermédiaires inutiles
    Tiens justement !
    J'ai une table historique où j'effectue pour chaque page les trois requêtes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $insert="INSERT INTO `historique` 
    (`idMembre`,`url`,`dateLecture`,`dateNombre`,`numero`,`titre`,`couleur`)
    VALUES 
    ('$numeroConnexion','$retour','$dateLecture','$dateNombre','1','$titreHistorique','$couleur' )";
    mysql_query($insert);
     
     
     $update = "UPDATE historique SET numero=numero+1 WHERE idmembre= '".$numeroConnexion."' ";
     mysql_query($update);
     
     
    $update="DELETE FROM historique WHERE idMembre = '".$numeroConnexion."' AND numero > 100 ";
    mysql_query($update);
    Je n'affiche en revanche le contenu de cette table que sur une seule page dans le tableau de bord.
    J'ai des index sur trois champs de la table.

    Puisque tu dis qu'il y a perte de performance à chaque insert car l'index doit être mis à jour (pourquoi au fait?), alors est-il judicieux dans mon cas d'utiliser les index ?

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Si je ne m'abuse, un index est utile principalement si l'on effectue de nombreuses recherches sur la table en question (par rapport aux insertions / modifications : cf. le message de Stéphane Eyskens). Dans le cas d'un historique, je doute que ce soit le cas...

    Si l'index est mis à jour, c'est bien sûr parce qu'il recense tous les enregistrements de chaque champ mis à l'index. Si un tuple est ajouté, il faut mettre à jour l'index.

    Tout était déjà dit, je ne sais pas si je suis + clair.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Par défaut
    Donc à te lire, je vire les index de ma table historique. Vu qu'elle enregistre 100 pages vues par membre, ça peut très vite faire une table très importante.
    Donc qu'est ce qui va être le plus long ?
    Ne pas mettre à jour les index mais aller chercher dans la table tous les enregistrement pour un membre ou bien mettre à jour les index et aller chercher avec un index tous les enregistrements pour un membre.
    Sachant qu'en effet l'index doit être mis à jours à toutes les pages alors que l'historique n'est appelé qu'occasionnellement.

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Je vais me contenter de citer ce qui est dit juste au-dessus :
    Il faut uniquement mettre des index sur des grosses tables et qui sont requêtées à 85% VS mise à jour.

  7. #7
    Membre chevronné
    Avatar de hachesse
    Inscrit en
    Mars 2002
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 189
    Par défaut
    Eviter toute opération unitile du type operation en 2 temps
    $c = $a + $b;
    $e = $c + d;
    est plus lent que $e = $a + $b + $d;

    D'une maniere générale, les optimisation possible pour une base de données sont ici : http://sqlpro.developpez.com/OptimSQL/SQL_optim.html

    Ouvir 1 seule connection à la base de donnée et la fermée à la fin de la page, preferer le connect au pconnect

    Utiliser des constantes plutot que des variables qui ne change pas (ex les login, mot de passe, host et nom de la base de données

    Preferer la syntaxe simple pour les chaines de caratere (guillemets simples) qui ne sont pas analysées par l'interpreteur PHP contrairement a la syntaxe complexe (guillemets double ou syntaxe here doc)

    Il y a aussi possibilité de mettre en cache les scripts PHP (ex php accelerator)

    Il faut aussi penser a bien configurer le serveur que ce soit au niveau du materiel, du systeme d'exploitation ou du serveur http

  8. #8
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut
    Citation Envoyé par hachesse Voir le message

    Ouvir 1 seule connection à la base de donnée et la fermée à la fin de la page, preferer le connect au pconnect
    Bonjour,
    J'ai fais un site php où tous mes liens renvoient vers la page index.php mais avec des contenus(includes) différents..
    Pour l'instant , dès que j'ai besoin de ma BD , j'ouvre la connect , j'envoie la requete puis je ferme..
    Serais-ce plus optimal d'ouvrir la connexion au démarrage de la SESSION et de fermer la connexion à la BD lors de la fermeture de session?

    Je n'ai pas , au premier jet , employé cette technique , car je me suis dis que l'utilisateur risquerait de garder la connex à la BD assez longtemps , je ne sais pas si c'est problématique ou non..

    Merci de votre aide

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Tu es en train de proposer exactement le contraire de ce que recommande hachesse. Tu voudrais ouvrir une connexion permanente, mais de nombreuses discussions à ce sujet déconseillent cette approche.

  10. #10
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut
    Citation Envoyé par Yogui Voir le message
    Salut

    Tu es en train de proposer exactement le contraire de ce que recommande hachesse. Tu voudrais ouvrir une connexion permanente, mais de nombreuses discussions à ce sujet déconseillent cette approche.
    C'est le pourquoi du comment je n'ai pas fais celà..
    Je reformule ma question alors :
    Est-ce mieux d'ouvrir et fermer la connexion à chaque page ? (genre debut du body = connex , fin du body = deco)
    ou alors l'ouvrir et fermer uniquement lorsque j'en ai besoin ? (ce qui signifie que parfois je ne l'ouvrirai pas , parfois je l'ouvrirai/fermerai plusieurs fois par page)

  11. #11
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Le mieux est d'utiliser des connexions éphémères, car les connexions peristantes subissent le gros problème d'Internet : on n'a aucun moyen fiable de déterminer quand l'utilisateur est inactif, absent, etc. Donc pas de connex persistantes, mais apparemment tu le sais déjà.

    Restent les connexions éphémères.
    Le plus simple est de ne jamais fermer manuellement la connexion : PHP s'en chargera lui-même en terminant l'exécution du script. Évidemment, réouvrir une connexion fermée dans un même script est une énorme perte de ressources.

  12. #12
    Invité(e)
    Invité(e)
    Par défaut oui c'est problématique !!
    Citation Envoyé par libuma Voir le message
    Bonjour,
    J'ai fais un site php où tous mes liens renvoient vers la page index.php mais avec des contenus(includes) différents..
    Pour l'instant , dès que j'ai besoin de ma BD , j'ouvre la connect , j'envoie la requete puis je ferme..
    Serais-ce plus optimal d'ouvrir la connexion au démarrage de la SESSION et de fermer la connexion à la BD lors de la fermeture de session?

    Je n'ai pas , au premier jet , employé cette technique , car je me suis dis que l'utilisateur risquerait de garder la connexion à la BD assez longtemps , je ne sais pas si c'est problématique ou non..

    Merci de votre aide
    En fait la plus part des providers ou hébergeurs si tu préféres , mettent à disposition des bases mysql avec un certain nombre de connexion simuatanées.

    48 : pour INFOMANIAK ( exemple ) .

    si tu conserves les connexions tu risques d'avoir un message du type server busy !!

    Généralement on ouvre la connexion , puis un éxécute la requête puis un fois que l'on a son résultat on fait un close sur la connexion .

    a+

  13. #13
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut
    une chose est sure , on évite les connexions persistantes alors ^^
    pour le reste , vous m'avez donné deux versions différentes

    Mais bon , merci de votre aide

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Fermer manuellement la connexion au plus tôt s'appelle de l'optimisation prématurée : La plupart du temps, les hébergeurs dimensionnent le nombre de connexions simultanées de manière à satisfaire tout le monde, tu n'as donc pas besoin de couper manuellement la connexion dans tes scripts de manière à gagner quelques pouillèmes de microseconde...

    Si tu atteins le seuil de connexions simultanées, ce n'est pas en coupant dès que possible la connexion que tu résoudras le problème, mais en optimisant les requêtes elles-mêmes : ne pas faire un SELECT * si tu veux simplement compter le nombre de lignes, etc.


    Bref, dans aucun cas il ne me semble utile de fermer manuellement la connexion à la base. L'avantage de cette pratique est que cela te permet de relancer une requête à tout moment sans te poser de question.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Par défaut
    Bonjour tout le monde,

    Je me poses deux questions relatives à l'optimisation de PHP/MySQL:

    1) hachesse a dit ceci :

    Citation Envoyé par hachesse Voir le message
    Ouvir 1 seule connection à la base de donnée et la fermée à la fin de la page, preferer le connect au pconnect
    C'est pas mieux de se connecter/déconnecter pour chaque requête une fois qu'on a récupérer les valeurs pour peu que les requêtes soient espacées les unes des autres ?

    2) Lorsqu'on fait une boucle, vaut-il mieux stocker en variable pour tout afficher une fois la boucle terminée ou afficher au fur à mesure ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Tout afficher d'un seul coup
    while ($row = @mysql_fetch_assoc($sql)) {
         $var .=$row[col1];
    }
    echo $var;
     
    // Afficher au fur et à mesure
    while ($row = @mysql_fetch_assoc($sql)) {
         echo $row[col1];
    }
    Merci beaucoup pour ce sujet très intéressant et pour toutes réponses à mes questions !

  16. #16
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 325
    Par défaut
    Citation Envoyé par King Bradley Voir le message
    C'est pas mieux de se connecter/déconnecter pour chaque requête une fois qu'on a récupérer les valeurs pour peu que les requêtes soient espacées les unes des autres ?
    Une connexion prend plus de temps qu'une simple requete, donc avec 3 SELECT, tu vas multiplier ton temps par 4(ou plus) sur une page

    pour peu que les requêtes soient espacées les unes des autres
    Il faut combien de temps à php pour exécuter 50 lignes de code entre tes requêtes ? php est rapide
    Et si tu as 1000 personnes de connectées sur ton site le serveur se prend 3000 connexions en 2 secondes ! et même si tu espaces tes requêtes

    Citation Envoyé par King Bradley Voir le message
    2) Lorsqu'on fait une boucle, vaut-il mieux stocker en variable pour tout afficher une fois la boucle terminée ou afficher au fur à mesure ?
    La vitesse est la même, simplement dans un cas tu consommes de la mémoire, alors que dans l'autre c'est négligeable. On ne choisit la structure gloutonne, voire dangereuse, uniquement si elle est nécessaire.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Par défaut
    Merci beaucoup pour ces réponses claires et précises

  18. #18
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    1/ Donc concernant l'ouverture/fermeture des connections on peut être affirmatif, et retenir que "moins on ouvre et ferme la connection et mieux c'est" car ce processus prend un temps non négligeable.

    2/ Par contre concernant le fait d'enregistrer le contenu du résultat dans une variable (souvent un tableau), c'est plus discutable. Outre le fait que cela permet de libérer plus vite la ressource de la requête, on le fait aussi très souvent pour des pb d'organisation de code comme indiqué par sekaijin. Sur le principe c'est très optimisé côté serveur bdd mais évidemment moins côté php qui doit passer par la création d'un tableau et donc consommer du temps et de la mémoire. Donc suivant les configurations de code mais aussi et surtout suivant la grandeur du tableau, on pourra choisir d'afficher directement la ressource plutôt que de passer par un tableau ou un objet intermédiaire. Mais à la différence de papajoker (si j'ai bien compris sa réponse) et notamment pour les raisons indiquées par sekaijin, je dirai que c'est plutôt assez rare et qu'on à tendance à privilégier aujourd'hui la structure "gloutonne" côté php. Enfin bon tu vois que les réponses peuvent varier suivant les critères et le code que l'on considère et l'on ne peut pas être aussi catégorique que pour ta première question.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Par défaut
    Oui, je vois ça ^^

    Merci à vous trois pour ces réponses !

  20. #20
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Citation Envoyé par King Bradley Voir le message
    Bonjour tout le monde,

    Je me poses deux questions relatives à l'optimisation de PHP/MySQL:

    1) hachesse a dit ceci :



    C'est pas mieux de se connecter/déconnecter pour chaque requête une fois qu'on a récupérer les valeurs pour peu que les requêtes soient espacées les unes des autres ?

    2) Lorsqu'on fait une boucle, vaut-il mieux stocker en variable pour tout afficher une fois la boucle terminée ou afficher au fur à mesure ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Tout afficher d'un seul coup
    while ($row = @mysql_fetch_assoc($sql)) {
         $var .=$row[col1];
    }
    echo $var;
     
    // Afficher au fur et à mesure
    while ($row = @mysql_fetch_assoc($sql)) {
         echo $row[col1];
    }
    Merci beaucoup pour ce sujet très intéressant et pour toutes réponses à mes questions !
    1) attention pconnect c'est grâce à lui qu'on a sur les site avec MYSQL derrière des "Too many connections in ..." en effet le pconnect ne ferme pas les connexions mais normalement les restitues pour la réutiliser. il s'agit d'un pool de connexions mais on ne maîtrise pas le nombre côté client d'où des pb.

    2) moins on ouvre et ferme les connection mieux c'est.

    3) c'est tout le problèmes des pattern en couche. en théorie la couche présentation ne doit pas avoir accès à la couche métier (uniquement au contrôleur) le contrôleur ne devrait donner que des valeur à la couche présentation et pas d'objet métier.
    l'objet métier lui-même ne doit pas accéder à la persistance mais passer par le service d'accès au donnée DAO. le DAO ne doit pas donner d'objet de persistance à la couche métier.
    voilà pour la théorie. il en résulte que lorsque ta requête à remonté les données elle doit donner ces données à l'objet métier. mais ne doit pas lui fournir les élément de persistance. donc normalement l'objet métier ne peut voir le resultset.
    il en résulte que la seule solution est de placer les données en mémoire hors du resultset.
    c'est pourquoi souvent on vois dans ces archies le DAO parcourir le resultset pour alimenter un objet métier.
    mais lorsque le contrôleur récupère à sont tour l'objet métier il ne doit pas le donner à la couche présentation. là encore on n'a pas le choix si on respecte la théorie les données sont sortie de l'objet métier pour être placé dans la vue.

    tout ceci est consommateur d'espace et de temps. les frameworks s’arrangent plus ou moins avec la théorie.
    une solution fréquente consiste à créer un dataobjet (objet sans méthode juste des membres). le DAO extrait les data du resultset et le mets dans le dataobjet. il donne ensuite une référence à l'objet métier. celui-ci garde la référence et l'encapsule. on vois alors les membre comme s'il était ceux de l'objet métier. le contrôleur à sont tour passe cette référence à la vue. la vue peux donc accéder au data mais pas manipuler les méthodes métier. l'honneur est sauf.
    enfin presque car si la vue change une valeur l'objet métier et modifié. en effet la vue possède la même référence que l'objet métier sur le dataobjet. ce n'est donc pas parfait.

    l'optimal en terme de temps et d'espace est de donner directement le resultset à la vue. en effet on ne lit le contenu du résultset que lorsqu'on l'utilise réellement. mais du coup plus e couche plus de métier plus de contrôle.

    enfin in existe bien des optimisations intermédiaire pour ce problème. et le mieux est de connaitre les patterns existant et de comprendre leurs objectifs, leurs contraintes, leur champs d'applications, pour faire le bon choix en toute connaissances.

    A+JYT

Discussions similaires

  1. [Débutant] Accélérer et optimiser ses scripts PHP
    Par Metallic-84s dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2006, 13h37
  2. [MySQL] [SGBD] Script PHP/MYSQL d'access FTP
    Par ChRom dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/01/2006, 02h52
  3. Réponses: 9
    Dernier message: 05/01/2006, 13h24
  4. Recherche Login Script PHP & MySQL
    Par whbh dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 01/12/2005, 17h45
  5. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/08/2004, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo