2012-07-22 3 views
1

J'ai une table dans ma base de données:PHP MySQL accès de requêtes lentes

enter image description here

Et j'utilise MySQL pour insérer/mise à jour/créer d'info mais le temps qu'il faut pour exécuter des requêtes est par exemple lent:

d'abord lorsqu'un utilisateur exécute mon application, il vérifie qu'ils peuvent l'utiliser en récupérant toutes les adresses IP de la db avec

SELECT IP FROM user_info 

Ensuite, en utilisant une boucle while si l'IP est dans la db faire une autre requête:

"SELECT Valid FROM user_info WHERE IP='".$_SERVER['REMOTE_ADDR']."'"" 

Si valide est 1 alors ils peuvent l'utiliser sinon ils ne peuvent pas si leur adresse IP ne se trouve pas dans la db il crée une nouvelle entrée pour les utiliser

"INSERT INTO user_info (IP,First) VALUES ('".$_SERVER['REMOTE_ADDR']."','".date("Y/m/d") ."')")" 

Maintenant que ce premier script a terminé, il accède à un autre - celui-ci était censé mettre à jour la base de données chaque minute mais je ne pense pas que je puisse accomplir cela maintenant; la requête de mise à jour est la suivante:

"UPDATE user_info SET Name='".$Name."', Status='".$Status."', Last='".$Last."', Address='".$Address."' WHERE IP='".$_SERVER['REMOTE_ADDR']."'")" 

Tous ensemble il faut en moyenne 2.2 secondes et il n'y a que 1 rang dans le tableau atm

Ma question est de savoir comment accélérer les requêtes i de MySQL? J'ai lu sur les index et comment ils peuvent aider à améliorer les performances, mais je ne comprends pas complètement comment les utiliser. Toute lumière sur ce sujet aiderait.

Nubcake

+0

Quelque chose d'aussi facile que 'service mysqld restart' pourrait faire l'affaire ... – nico

Répondre

3

index deviendront très important que votre site se développe, mais ils ne seront pas aider quand vous avez seulement une ligne dans votre table et il ne peut pas être la raison pour laquelle vos requêtes sont si longues. Vous semblez avoir une sorte de problème fondamental avec votre base de données. Peut-être que c'est un problème de latence. Essayez de commencer par des requêtes plus simples comme SELECT * FROM users LIMIT 1 ou même simplement SELECT 1 et voyez si vous obtenez toujours de mauvaises performances.

+0

Je n'avais pas l'intention d'avoir 1 ligne mais plus, je vais essayer ce que vous avez dit, je le lance sur localhost via EasyPHP cela fait une différence? – Nubcake

+0

Cela prend 1 seconde quand j'utilise SELECT * FROM utilisateurs LIMIT 1 – Nubcake

+0

Nubcake: C'est vraiment mauvais, et cette requête devrait être rapide même sans index. Qu'en est-il de 'SELECT 1'? –

-1

vous pouvez faire la clé primaire IP et Index

+0

Comment cela aide-t-il? S'il vous plaît expliquer – Nubcake

+0

Il est plus rapide lorsqu'il recherche et met à jour les lignes lorsqu'il est indexé. –

+0

Essayez et exécutez la requête dans un shell avec mysql - et voyez si ce n'est pas un problème de performance php/webserver. –

1

Lesser le nombre de requêtes, moins le temps de latence du système. Essayez de fusionner les requêtes en cours sur la même table. Par exemple, votre deuxième et troisième requêtes peuvent être fusionnées et vous pouvez exécuter

INSERT INTO user_info ...... WHERE Valid=1 AND IP= ... 

Vérifiez le nombre de lignes affectées à savoir si une nouvelle ligne a été ajouté ou non.

De même, n'ouvrez/ne fermez pas votre connexion sql entre les deux. Les frais généraux d'établissement d'une nouvelle connexion pourraient être élevés.

+0

Je peux essayer de fusionner des requêtes mais pensez-vous qu'il va perdre beaucoup de temps? En ce qui concerne la fermeture des connexions, je ferme uniquement la connexion à la fin du script, là où elle doit l'être. – Nubcake

+0

Cela ressemble à un problème de configuration dans ce cas. Essayez une réinstallation. –

Questions connexes