2010-07-20 6 views
4

J'ai un script PHP en deux parties.Les requêtes MySQL ralentissent après un DELETE

  1. Le premier qui supprime certaines lignes dans la base de données
  2. La seconde qui déclenche les requêtes SELECT

Le second script est exécuté seul environ 0,2 sec. Lorsque les deux parties sont traitées, la seconde partie prend 5 secondes. La prochaine fois que le second script s'exécute seul, il revient à 0,2 sec.

Une idée?

+2

Je suppose que tous les indices que vous avez sur cette table sont en cours de reconstruction après la suppression. Pouvez-vous publier les résultats de SHOW INDEX FROM mytable? – twerq

+0

Si vous attendez quelques secondes après la suppression, le 'SELECT' s'exécute-t-il rapidement? Autrement dit, exécutez la suppression, attendez, puis exécutez la sélection. – Mike

+0

Il existe en fait un index: une clé primaire. Cependant, il n'y a pas de temps d'attente entre les deux parties des scripts. L'index est-il reconstruit pendant que la seconde partie s'exécute? existe-t-il un moyen de forcer la reconstruction d'index avant la deuxième partie du script? – MindTailor

Répondre

1

Il est probable que la requête a été mise en cache afin qu'elle s'exécute plus rapidement la deuxième fois, more info here. Si vous ajoutez SQL_NO_CACHE à la requête, vous devriez être en mesure de déterminer si le cache est un facteur.

+0

J'ai pensé à la mémoire cache, mais il semble qu'une fois qu'une requête s'exécute rapidement, l'autre tourne plus vite aussi ... – MindTailor

0

Votre Query-Cache pour une table est 'invalidé' chaque fois que la table est mise à jour. Le résultat est que tout UPDATE/DELETE/INSERT à votre table effacera le cache de requête de cette table et forcera un nouveau disque à lire pour le SELECT suivant. Le résultat sera une requête plus lente.

Voici un lien vers le MySQL DOCs.

Si votre table est incroyablement grande, vous voudrez peut-être étudier les tables MyISAM et un Key-Cache séparé pour améliorer encore les performances de lecture. MyISAM = lectures rapides, écritures rapides, accès simultané horrible pour les écritures/mises à jour. InnoDB = vitesse médiocre pour les lectures, bonne simultanéité pour les écritures/mises à jour.

- J Jorgenson -