Supprimer les enregistrements orphelins dans MySQL ?

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

Sébastien Night
Nouveau WRInaute
 
Messages: 21
Inscription: Ven Avr 06, 2007 13:40

Supprimer les enregistrements orphelins dans MySQL ?

Message le Mer Avr 11, 2007 10:22

J'ai appliqué sur un de mes forums phpBB (70 000 messages, une base de données trop grande pour l'hébergeur) ce script pour alléger les 2 000 000 d'enregistrements de ma table search_word_match.

Malheureusement, le mec qui a conçu ce script n'a pas eu le bon sens de penser à l'intégrité de la base de données. Du coup ça m'a foutu en l'air la logique de ma BDD. J'assume la responsabilité d'avoir appliqué le script sans sauvegarde, mais je suis quand même blasé.

J'explique :
Quand on écrit un post dans phpBB, celui-ci recense les mots contenus (en appliquant un filtre).
Ensuite les mots sont mis dans une table mots.
Puis pour chaque mot on crée un lien entre l'id du post et l'id du mot dans une table match.

Donc j'avais 120 000 mots et 2 000 000 de match
Le script me propose de choisir des mots à virer, j'ai viré tous les mots de moins de 3 lettres ainsi que les plus utilisés sur le forum (au moins 400 000 match de gagnés a priori).

Sauf que ce script supprime bêtement les mots en premier et les match ensuite. Donc comme chez moi, il a planté après avoir viré les mots, je suis pris au piège puisqu'il m'est impossible de retrouver les match "orphelins" !!!!! :evil:

Ma question technique est donc :
Comment faire pour virer les éléments orphelins d'une table d'associations sous MySQL ?


Merci d'avance,
SBN


arnaudmn
WRInaute accro
WRInaute accro
 
Messages: 1483
Inscription: Mer Mai 11, 2005 18:20

Message le Mer Avr 11, 2007 10:31

delete from table1
where not exists(select quelquechose from table2 where table1.unchamp = table2.unchamp)

Sébastien Night
Nouveau WRInaute
 
Messages: 21
Inscription: Ven Avr 06, 2007 13:40

Message le Mer Avr 11, 2007 10:35

Bon j'ai trouvé ce post et j'ai bidouillé la requete SQL de Suede.

Je crois que j'avance, j'arrive à compter les orphelins :
Code: Tout sélectionner
SELECT ls.word_id, ls.word_text, COUNT(wm.word_id) as entries
FROM `phpbb_search_wordmatch` as wm
LEFT JOIN `phpbb_search_wordlist` as ls ON ls.word_id=wm.word_id
WHERE ls.word_text IS NULL
GROUP BY wm.word_id
ORDER BY entries DESC

Sébastien Night
Nouveau WRInaute
 
Messages: 21
Inscription: Ven Avr 06, 2007 13:40

Message le Mer Avr 11, 2007 10:35

arnaudmn a écrit:delete from table1
where not exists(select quelquechose from table2 where table1.unchamp = table2.unchamp)

Des requêtes imbriquées sous MYSQL ? Je crois que c'est impossible !
Je vais quand même essayer.

Edit : j'ai fait le total, si j'arrive à tout virer ça va faire 648954 enregistrements en moins et je pourrai peut etre récupérer l'accès public à ma base :roll: (OVH l'a fermée en écriture !)

Re-edit :
Nombre d'enregistrements effacés : 648954 (traitement: 31.7975 sec.)
requête SQL:
Code: Tout sélectionner
DELETE FROM `phpbb_search_wordmatch` USING `phpbb_search_wordmatch` AS wm LEFT JOIN `phpbb_search_wordlist` AS ls ON ls.word_id = wm.word_id WHERE ls.word_text IS NULL


Et j'ai gagné ..... 0 octets 8O


Suede
WRInaute accro
WRInaute accro
 
Messages: 3721
Inscription: Ven Oct 04, 2002 11:22

Message le Mer Avr 11, 2007 11:52

Tu peux sinon vider les tables et reconstruire ton index grace à des mods.

Sébastien Night
Nouveau WRInaute
 
Messages: 21
Inscription: Ven Avr 06, 2007 13:40

Message le Mer Avr 11, 2007 12:03

J'ai décidé de payer pour un quota de 100 Mo.

Edit : après optimisation de la table je n'ai gagné que 5 Mo au final.


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités