[RESOLU] DELETE WHERE avec près de 10.000.000 lignes...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] DELETE WHERE avec près de 10.000.000 lignes...

Re: DELETE WHERE avec près de 10.000.000 lignes...

par two3d » 04 mars 2015, 22:57

Moi je dirais qu'il serait more simple d'avboir un champ date ou datetime dans la base.
Merci pour vos réponses, j'avais en effet prévue ce champs que je viens de voir à l'instant ! :mrgreen:
Sujet résolu !

Re: DELETE WHERE avec près de 10.000.000 lignes...

par sirakawa » 04 mars 2015, 18:50

Moi je dirais qu'il serait more simple d'avboir un champ date ou datetime dans la base.

Re: DELETE WHERE avec près de 10.000.000 lignes...

par xTG » 04 mars 2015, 18:07

Ta récupération de date n'est pas correcte.
Le MAX() te renverra le nombre max des enregistrements sans corrélation entre eux hormis le fait que c'est sur le même utilisateur.

Si tu as cela en base :
3-3-2015
31-2-2011
Ta requête renverra 31-3-2015.

Du coup ce que tu souhaites c'est plutôt le max de la date concaténée (je ne sais pas si l'expression se fait par contre en SQL).
Bref c'est un poil plus compliqué pour pouvoir obtenir la date correcte avant de retrancher 30 jours.

Pour le temps d'exécution sur un nombre aussi important de ligne vu le calcul que tu dois mettre en place je ne trouve pas cela dérangeant à vrai dire...

DELETE WHERE avec près de 10.000.000 lignes...

par two3d » 03 mars 2015, 20:11

Bonjour,

j'arrive pas à faire quelque chose de simple et rapide avec delete mysql, il me faut supprimer des champs qui sont supérieur ou égale à une année voulue et que le mois soit supérieur ou également à celui voulue, j'arrive à un max execution time au bout de 10mn, je n'y arrive.

Donc, pour commencer, je fait d'abord un while avec un select:

Code : Tout sélectionner

SELECT MAX(id) AS ids,id_membre,MAX(jour) AS jour,MAX(mois) AS mois,MAX(annee) AS annee FROM stats GROUP BY id_membre
les résultats sont de forme suivante:

#31274822# idm: 1 => 3-3-2015 intervale à supprimer: 01-02-2015
#31274806# idm: 2 => 3-3-2015 intervale à supprimer: 01-02-2015
#31274827# idm: 3 => 3-3-2015 intervale à supprimer: 01-02-2015
...

on à #id# de la stats dans la base (le MAX(id))
idm: id du membre
=> date de la dernière stat
Intervale à supprimer me calcul "date de la dernière stat" - 30 jours

Je souhaite ensuite faire un delete (dans le while), comme ceci:

Code : Tout sélectionner

mysql_query("DELETE FROM stats WHERE id_membre=".$in['id_membre']." AND mois<=".$MoisIntervalle." AND annee<=".$AnneeIntervalle);
Merci d'avance pour votre aide