Je cherche à trouver les doublons dans une de mes tables :
Film(id, titre_vf, titre_vo, annee, ...)
qui compte plus de 30.000 enregistrements.
Dans un premier temps, je cherche les films f1 et f2 tels que :
(f1.titre_vf = f2.titre_vf OR f1.titre_vf = f2.titre_vo OR f1.titre_vo =
f2.titre_vo) AND f1.annee = f2.annee
Cependant, une requête (MySQL) du style :
SELECT f1.id, f2.id FROM Film f1, Film f2 WHERE f1.id != f2.id AND
(f1.titre_vf = f2.titre_vf OR f1.titre_vf = f2.titre_vo OR f1.titre_vo =
f2.titre_vo) AND f1.annee = f2.annee
ne se termine pas, malgré des index sur la colonne titre_vf, titre_vo et
annee. En effet, je soupçonne MySql d'examiner les 900.000.000 de lignes
du produit cartésien Film x Film.
Y a-t-il une façon plus élégante de faire ce genre de choses ?
Sinon, je saurai écrire un petit script PHP qui séléctionne tous les
éléments de la table, puis fait le traitement en PHP, mais j'ai peur que
ce soit coûteux aussi de transférer tous les éléments de la table.
L'étape 2, ce sera une jointure pour trouver tous les films qui ont un
titre en commun et/ou la même année et/ou le même réalisateur (au moins
2 critères sur ces 3), sachant que les rôles sont dans une table du type :
Role(id, idFilm, idArtiste, idMetier).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD - SQLpro
mon étude sur le sujet : http://sqlpro.developpez.com/Doublons/Doublons.html
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Spontex a écrit:
Salut,
Je cherche à trouver les doublons dans une de mes tables : Film(id, titre_vf, titre_vo, annee, ...) qui compte plus de 30.000 enregistrements.
Dans un premier temps, je cherche les films f1 et f2 tels que :
(f1.titre_vf = f2.titre_vf OR f1.titre_vf = f2.titre_vo OR f1.titre_vo = f2.titre_vo) AND f1.annee = f2.annee
Cependant, une requête (MySQL) du style :
SELECT f1.id, f2.id FROM Film f1, Film f2 WHERE f1.id != f2.id AND (f1.titre_vf = f2.titre_vf OR f1.titre_vf = f2.titre_vo OR f1.titre_vo = f2.titre_vo) AND f1.annee = f2.annee
ne se termine pas, malgré des index sur la colonne titre_vf, titre_vo et annee. En effet, je soupçonne MySql d'examiner les 900.000.000 de lignes du produit cartésien Film x Film.
Y a-t-il une façon plus élégante de faire ce genre de choses ? Sinon, je saurai écrire un petit script PHP qui séléctionne tous les éléments de la table, puis fait le traitement en PHP, mais j'ai peur que ce soit coûteux aussi de transférer tous les éléments de la table.
L'étape 2, ce sera une jointure pour trouver tous les films qui ont un titre en commun et/ou la même année et/ou le même réalisateur (au moins 2 critères sur ces 3), sachant que les rôles sont dans une table du type : Role(id, idFilm, idArtiste, idMetier).
Merci d'avance !
mon étude sur le sujet :
http://sqlpro.developpez.com/Doublons/Doublons.html
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Spontex a écrit:
Salut,
Je cherche à trouver les doublons dans une de mes tables :
Film(id, titre_vf, titre_vo, annee, ...)
qui compte plus de 30.000 enregistrements.
Dans un premier temps, je cherche les films f1 et f2 tels que :
(f1.titre_vf = f2.titre_vf OR f1.titre_vf = f2.titre_vo OR f1.titre_vo =
f2.titre_vo) AND f1.annee = f2.annee
Cependant, une requête (MySQL) du style :
SELECT f1.id, f2.id FROM Film f1, Film f2 WHERE f1.id != f2.id AND
(f1.titre_vf = f2.titre_vf OR f1.titre_vf = f2.titre_vo OR f1.titre_vo =
f2.titre_vo) AND f1.annee = f2.annee
ne se termine pas, malgré des index sur la colonne titre_vf, titre_vo et
annee. En effet, je soupçonne MySql d'examiner les 900.000.000 de lignes
du produit cartésien Film x Film.
Y a-t-il une façon plus élégante de faire ce genre de choses ?
Sinon, je saurai écrire un petit script PHP qui séléctionne tous les
éléments de la table, puis fait le traitement en PHP, mais j'ai peur que
ce soit coûteux aussi de transférer tous les éléments de la table.
L'étape 2, ce sera une jointure pour trouver tous les films qui ont un
titre en commun et/ou la même année et/ou le même réalisateur (au moins
2 critères sur ces 3), sachant que les rôles sont dans une table du type :
Role(id, idFilm, idArtiste, idMetier).
mon étude sur le sujet : http://sqlpro.developpez.com/Doublons/Doublons.html
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Spontex a écrit:
Salut,
Je cherche à trouver les doublons dans une de mes tables : Film(id, titre_vf, titre_vo, annee, ...) qui compte plus de 30.000 enregistrements.
Dans un premier temps, je cherche les films f1 et f2 tels que :
(f1.titre_vf = f2.titre_vf OR f1.titre_vf = f2.titre_vo OR f1.titre_vo = f2.titre_vo) AND f1.annee = f2.annee
Cependant, une requête (MySQL) du style :
SELECT f1.id, f2.id FROM Film f1, Film f2 WHERE f1.id != f2.id AND (f1.titre_vf = f2.titre_vf OR f1.titre_vf = f2.titre_vo OR f1.titre_vo = f2.titre_vo) AND f1.annee = f2.annee
ne se termine pas, malgré des index sur la colonne titre_vf, titre_vo et annee. En effet, je soupçonne MySql d'examiner les 900.000.000 de lignes du produit cartésien Film x Film.
Y a-t-il une façon plus élégante de faire ce genre de choses ? Sinon, je saurai écrire un petit script PHP qui séléctionne tous les éléments de la table, puis fait le traitement en PHP, mais j'ai peur que ce soit coûteux aussi de transférer tous les éléments de la table.
L'étape 2, ce sera une jointure pour trouver tous les films qui ont un titre en commun et/ou la même année et/ou le même réalisateur (au moins 2 critères sur ces 3), sachant que les rôles sont dans une table du type : Role(id, idFilm, idArtiste, idMetier).
Merci d'avance !
Spontex
Fred BROUARD - SQLpro wrote:
mon étude sur le sujet : http://sqlpro.developpez.com/Doublons/Doublons.html
Merci Frédéric, je l'ai déjà lue avant de venir ici pour poser ma question. Mais la méthode que tu donnes pour les quasi-doublons me paraît très très lourde (pour chaque élément de la table, on refait une requête, ce qui me paraît énorme !). Je vais toutefois refaire un essai. Sinon, y a-t-il une méthode pour retrouver les quasi-doublons avec faute de frappe (genre quelque chose qui utiliserait SOUNDEX ou du style ?)
Fred BROUARD - SQLpro wrote:
mon étude sur le sujet :
http://sqlpro.developpez.com/Doublons/Doublons.html
Merci Frédéric, je l'ai déjà lue avant de venir ici pour poser ma question.
Mais la méthode que tu donnes pour les quasi-doublons me paraît très
très lourde (pour chaque élément de la table, on refait une requête, ce
qui me paraît énorme !). Je vais toutefois refaire un essai.
Sinon, y a-t-il une méthode pour retrouver les quasi-doublons avec faute
de frappe (genre quelque chose qui utiliserait SOUNDEX ou du style ?)
mon étude sur le sujet : http://sqlpro.developpez.com/Doublons/Doublons.html
Merci Frédéric, je l'ai déjà lue avant de venir ici pour poser ma question. Mais la méthode que tu donnes pour les quasi-doublons me paraît très très lourde (pour chaque élément de la table, on refait une requête, ce qui me paraît énorme !). Je vais toutefois refaire un essai. Sinon, y a-t-il une méthode pour retrouver les quasi-doublons avec faute de frappe (genre quelque chose qui utiliserait SOUNDEX ou du style ?)
Fred BROUARD - SQLpro
il n'y a pas de recette miracle.
Il faut prévoir cette problématique à la conception de la base si l'on veut être tranquille.
A +
Spontex a écrit:
Fred BROUARD - SQLpro wrote:
mon étude sur le sujet : http://sqlpro.developpez.com/Doublons/Doublons.html
Merci Frédéric, je l'ai déjà lue avant de venir ici pour poser ma question. Mais la méthode que tu donnes pour les quasi-doublons me paraît très très lourde (pour chaque élément de la table, on refait une requête, ce qui me paraît énorme !). Je vais toutefois refaire un essai. Sinon, y a-t-il une méthode pour retrouver les quasi-doublons avec faute de frappe (genre quelque chose qui utiliserait SOUNDEX ou du style ?)
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
il n'y a pas de recette miracle.
Il faut prévoir cette problématique à la conception de la base si l'on veut être
tranquille.
A +
Spontex a écrit:
Fred BROUARD - SQLpro wrote:
mon étude sur le sujet :
http://sqlpro.developpez.com/Doublons/Doublons.html
Merci Frédéric, je l'ai déjà lue avant de venir ici pour poser ma question.
Mais la méthode que tu donnes pour les quasi-doublons me paraît très
très lourde (pour chaque élément de la table, on refait une requête, ce
qui me paraît énorme !). Je vais toutefois refaire un essai.
Sinon, y a-t-il une méthode pour retrouver les quasi-doublons avec faute
de frappe (genre quelque chose qui utiliserait SOUNDEX ou du style ?)
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Il faut prévoir cette problématique à la conception de la base si l'on veut être tranquille.
A +
Spontex a écrit:
Fred BROUARD - SQLpro wrote:
mon étude sur le sujet : http://sqlpro.developpez.com/Doublons/Doublons.html
Merci Frédéric, je l'ai déjà lue avant de venir ici pour poser ma question. Mais la méthode que tu donnes pour les quasi-doublons me paraît très très lourde (pour chaque élément de la table, on refait une requête, ce qui me paraît énorme !). Je vais toutefois refaire un essai. Sinon, y a-t-il une méthode pour retrouver les quasi-doublons avec faute de frappe (genre quelque chose qui utiliserait SOUNDEX ou du style ?)
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************