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

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