Améliorer une requete where not exists

Fallentree Messages postés 2445 Statut Membre -  
 Joe -
Bonjour,

Ma requete est de la forme :

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 ...

https://forums.commentcamarche.net/forum/affich-5630930-sql-where-not-exists-recherch-de-table-vide

1 réponse

  1. Joe
     
    Essaye :

    SELECT 'name','path','date'
    FROM 'photos'as'pp'
    where name not in
    (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' ))
    0
    1. Fallentree Messages postés 2445 Statut Membre 210
       
      Avec cette requete, on est passé de 12 mm à 3mn30.
      Bravo ...
      Mais je pense que l on peut faire mieux ...
      Nb: Il faut 4mn pour reunitialiser toute la table avec toutes les propriétés.
      Si ce n'est pas instantané, ça n'ira pas...
      0
    2. Joe
       
      Pour accélérer la requête, il faut jouer sur les index. Qu'est-ce que tu as défini comme index sur ta table ?
      0
    3. Fallentree Messages postés 2445 Statut Membre 210
       
      Pas de possibilité de jointure.
      'name','path','date' sont tout les champs de 'photos' qui une vue des répertoires des photos.

      Pour la table 'photo info', y a un index auto-increment pour faire beau...

      Je te reponds mais je ne vois pas comment faire avec une indexation
      si peut avoir un nouveau n importe où ...

      Indexer Photos
      puis une jointure entre 'photos' et 'photo info'
      et retrouver les manquants a l aide de not in???
      0
    4. Joe
       
      Il faut que tu fasses 2 index :
      - un index sur (name,path,date) sur la table photos
      - un index sur name sur la table photo infos

      Ca devrait être mieux.
      0