Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2010, 16h36   #1
Invité de passage
 
p dupres
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : p dupres

Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
Par défaut Améliorer une requete where not exists

Bonjour,

Ma requete est de la forme :

Code :
1
2
3
4
5
6
7
8
SELECT name, path, `date` 
FROM photos AS pp 
WHERE NOT EXISTS (
  SELECT `Nom du fichier` 
  FROM `photo info` 
  WHERE `photo info`.`Nom du fichier` = pp.name 
    AND `photo info`.`Date Archivage` = pp.`date` 
    AND `photo info`.`Path Recadre` = pp.path)
Pour 5000 photos identique à une dizaine près, il faut prés un quart d heure ...
Cela devient long d'avancer pour les incohérences ;
- fichier déplacer
- supprimer
- modifier ...

Je me demandais si y avait pas un moyen d'aller plus vite.

Faut il recoder en php la boucle de recherche des nouveaux fichiers non repertorier ?

J ai vu une redaction de la forme
AND champ NOT IN (SELECT champ FROM table )
Mais y a pas de réponse sur cette astuce ...
Et mon serveur a planter ... Bref ...

Merci du coups de main
first racing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 16h42   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 932
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 932
Points : 17 736
Points : 17 736
1) NOT EXISTS sera plus rapide que NOT IN
2) MySQL est connu pour avoir un optimiseur assez mauvis et en particulier pour le cas de sous requêtes ou les vues.
A part rajouter massivement de la RAM, et du disque (inutile de rajouter de la CPU, MySQL ne sait pas paralléliser !!!), je vous conseillerais donc de passer plutôt sur du PostGreSQL, bien plus optimisé pour ce genre de chose, et qui plus est gratuit !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 16h48   #3
Invité de passage
 
p dupres
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : p dupres

Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
Par défaut en gros faire la boucle soit même !§!

Mais faire une procedure de comparaison suivant la structure avec des order by dans les tables jumelles ...
Ca n'a pas l'air compliqué...
Mais du coups c est peut etre une amelioration dans la clause not exists ???
Y a pas de commentaires dans ma litterature ...
first racing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 16h49   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 945
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 945
Points : 18 140
Points : 18 140
Envoyer un message via MSN à CinePhil
Tes tables sont-elles indexées ?

Tu peux remplacer NOT EXISTS par une jointure externe et tester le NULL mais en principe NOT EXISTS est plus rapide.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 17h10   #5
Invité de passage
 
p dupres
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : p dupres

Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
Citation:
Envoyé par CinePhil Voir le message
Tes tables sont-elles indexées ?

Tu peux remplacer NOT EXISTS par une jointure externe et tester le NULL mais en principe NOT EXISTS est plus rapide.
Non, c 'est juste une bdd de fichiers photos, copie d une structure de répertoires oganisés en thèmes ( Famille Vacance ou autres... ).

Ajouter 250 photos apres un WE par exemple, c est long y a des erreur de classement du coups: la tante Pierrrette ou Blanchette...

En gros pas d'index compatible...

Le nom, la date de creation du fichier et le chemin sont les seules clauses unicités selon moi ...

Pour le moment, je voulais créer la table image des repertoires et puis me comtenter d une comparaison sur les speudo clefs
mais je crois qu il faut prevoir une reduction des données soit par repertoires soit directement fichier par fichier ...

J aurais bien voulu voir une courbe en fonction du nombre d enregistrement...

Merci pour l astuce null d ailleurs je l ai deja lu.
first racing est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h10.


 
 
 
 
Partenaires

Hébergement Web