Supprimer les enregistrements orphelins dans MySQL ?
6 messages • Page 1 sur 1
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 ?
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" !!!!!
Ma question technique est donc :
Comment faire pour virer les éléments orphelins d'une table d'associations sous MySQL ?
Merci d'avance,
SBN
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" !!!!!
Ma question technique est donc :
Comment faire pour virer les éléments orphelins d'une table d'associations sous MySQL ?
Merci d'avance,
SBN
- Sébastien Night
- Nouveau WRInaute
- Messages: 21
- Inscription: Ven Avr 06, 2007 13:40
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 :
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
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
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
- Sébastien Night
- Nouveau WRInaute
- Messages: 21
- Inscription: Ven Avr 06, 2007 13:40
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.
Edit : après optimisation de la table je n'ai gagné que 5 Mo au final.
6 messages • Page 1 sur 1
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 :
- Nouvelle version de GoogleStats : v1.1
- Google propose en option un lien pour supprimer un site des résultats
- Gestion des langues et des sessions en PHP / MySQL
- Passage à l'heure d'été/hiver sur un forum phpBB
- Répartition des clics sur les 10 premiers résultats Google
- GoogleStats : analyse temps réel des visites de Google sur votre site
- Google attaqué en justice
- Sortie officielle de GoogleStats v2.0 !
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- Outil officiel de suppression de pages de l'index Google
Consultez la description détaillée des produits ou services de Google suivants : Google Apps for your Domain
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


le forum