Projet

Général

Profil

Anomalie #13162

Recherche des doublons non affichables (temps d'affichage trop long)

Ajouté par Ludovic ARAUJO il y a environ 4 ans. Mis à jour il y a presque 3 ans.

Statut:
R&D - Terminé
Priorité:
1-Majeur
Assigné à:
Version cible:
Début:
07/02/2020
Echéance:
Version applicable MC:
Tags Courrier:

Description

Optimisation du module de recherche de doublons
ex : limité la recherche à 30 éléments

Historique

#2 Mis à jour par Ludovic ARAUJO il y a environ 4 ans

  • Priorité changé de 2-Sérieux à 1-Majeur

#3 Mis à jour par Support Maarch il y a environ 4 ans

  • Statut changé de A qualifier à A traiter

#4 Mis à jour par Emmanuel DILLARD il y a environ 4 ans

  • Tracker changé de Anomalie à Ergonomie
  • Sujet changé de Recherche des doublons non affichables(temps d'affichage trop long)(inutilisables par le client) à Recherche des doublons non affichables (temps d'affichage trop long)
  • Statut changé de A traiter à Etude planifiée

#5 Mis à jour par Emmanuel DILLARD il y a environ 4 ans

  • Statut changé de Etude planifiée à 17
  • Assigné à mis à Ludovic ARAUJO

Indiquer les temps /volumétrie de la base.

L'optimisation à été réalisée dans la 19.04 STD.

#6 Mis à jour par Ludovic ARAUJO il y a environ 4 ans

Volume de données : Plus de 8k de doublons.
Temps : plus de 13 minutes.

Arrêt de l’exécution par php.
Cause : Mémoire insuffisante.

php doit stocker plus de 4Go sur le serveur pour le faire passer au client par la suite.

Après modification et amélioration, je vous propose de remplacer les requêtes suivantes :

SELECT distinct contacts_v2.contact_id,
                      lower(translate(contacts_v2.lastname || ' ' || contacts_v2.firstname,
                                      'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                                      'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr '))         as lastname_firstname,
                      society,
                      society_short,
                      is_corporate_person,
                      contacts_v2.lastname,
                      contacts_v2.firstname,
                      contacts_v2.title,
                      (select count(*)
                       from contact_addresses as ca2
                       where ca2.contact_id = contacts_v2.contact_id)                                               as nb_addresses,
                      (select id from contact_addresses where contact_addresses.contact_id = contacts_v2.contact_id LIMIT 1),
                      (select address_num from contact_addresses where contact_addresses.contact_id = contacts_v2.contact_id LIMIT 1),
                      (select address_street from contact_addresses where contact_addresses.contact_id = contacts_v2.contact_id LIMIT 1),
                      (select address_postal_code from contact_addresses where contact_addresses.contact_id = contacts_v2.contact_id LIMIT 1),
                      (select address_town from contact_addresses where contact_addresses.contact_id = contacts_v2.contact_id LIMIT 1),
                      (select email from contact_addresses where contact_addresses.contact_id = contacts_v2.contact_id LIMIT 1)
      from contacts_v2
      WHERE lower(translate(contacts_v2.lastname || ' ' || contacts_v2.firstname,
                            'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                            'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr ')) in (
                SELECT lower(translate(contacts_v2.lastname || ' ' || contacts_v2.firstname,
                                       'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                                       'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr ')) as lastname_firstname
                FROM contacts_v2
                GROUP BY lastname_firstname
                HAVING Count(lower(translate(contacts_v2.lastname || ' ' || contacts_v2.firstname,
                                             'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                                             'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr '))) >
                       1
                   and lower(translate(contacts_v2.lastname || ' ' || contacts_v2.firstname,
                                       'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                                       'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr ')) <>
                       ' ')
      order by lower(translate(contacts_v2.lastname || ' ' || contacts_v2.firstname,
                               'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                               'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr ')),
               contacts_v2.contact_id

par

WITH c as
(SELECT distinct contacts_v2.contact_id,
                  (lower(translate(contacts_v2.lastname || ' ' || contacts_v2.firstname,
                                  'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                                  'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr '))) as lastname_firstname,
                  society,
                  society_short,
                  is_corporate_person,
                  contacts_v2.lastname,
                  contacts_v2.firstname,
                  contacts_v2.title,
                  (select count(*) from contact_addresses as ca2 where ca2.contact_id = contacts_v2.contact_id) as nb_addresses,
                  ca.id,
                  ca.address_num,
                  ca.address_street,
                  ca.address_postal_code,
                  ca.address_town,
                  ca.email
  FROM contacts_v2
  left join contact_addresses ca on ca.contact_id = contacts_v2.contact_id)
  SELECT distinct c.contact_id,
                  c.lastname_firstname,
                  c.society,
                  c.society_short,
                  c.is_corporate_person,
                  c.lastname,
                  c.firstname,
                  c.title,
                  c.nb_addresses,
                  c.id,
                  c.address_num,
                  c.address_street,
                  c.address_postal_code,
                  c.address_town,
                  c.email
  FROM c
  WHERE c.lastname_firstname in (
                            SELECT c.lastname_firstname as lf
                            FROM c
                            GROUP BY c.lastname_firstname
                            HAVING Count(c.lastname_firstname) > 1
                            and c.lastname_firstname <> ' '
                        )
  order by c.lastname_firstname, c.contact_id LIMIT 100;

Ainsi que :

SELECT contact_id,
       society,
       lower(translate(society, 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                       'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr ')) as society_comp
from contacts_v2
WHERE is_corporate_person = 'Y'
  AND
      lower(translate(society, 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                      'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr ')) in (
          SELECT lower(translate(society, 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                                 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr '))
          FROM contacts_v2
          where is_corporate_person = 'Y'
          GROUP BY lower(translate(society, 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                                   'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr '))
          HAVING Count(lower(translate(society, 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                                       'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr '))) > 1
             and lower(translate(society, 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                                 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr ')) <> ''
      )
order by lower(society), contact_id

par :

WITH s AS 
(SELECT contact_id,
       society,
       lower(translate(society, 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ-',
                       'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr ')) AS society_comp
FROM contacts_v2
WHERE is_corporate_person = 'Y')
SELECT contact_id,
       society,
       society_comp
FROM s WHERE society_comp IN (
          SELECT society_comp
          FROM s
          GROUP BY society_comp
          HAVING Count(society_comp) > 1
             AND society_comp <> ''
      )
ORDER BY lower(society), contact_id LIMIT 100;

Les effet sont les suivants :

Mémoire max allouée pour la requête réduite et limité.
Affichage du résultat en navigateur possible sans avoir 4Go ou plus de mémoire sur le poste.
Demande un rafraîchissement de la page après fusion de tous les doublons présents.

#7 Mis à jour par Emmanuel DILLARD il y a environ 4 ans

  • Tracker changé de Ergonomie à Anomalie
  • Statut changé de 17 à R&D - A planifier

#8 Mis à jour par Emmanuel DILLARD il y a environ 4 ans

  • Assigné à changé de Ludovic ARAUJO à EDI PO

#9 Mis à jour par Emmanuel DILLARD il y a environ 4 ans

  • Projet changé de Backlog à CURRENT SPRINT
  • Statut changé de R&D - A planifier à R&D - En cours

#11 Mis à jour par Florian AZIZIAN il y a environ 4 ans

  • Assigné à EDI PO supprimé

#12 Mis à jour par Guillaume HEURTIER il y a environ 4 ans

  • Assigné à mis à Guillaume HEURTIER

#13 Mis à jour par Guillaume HEURTIER il y a environ 4 ans

  • Statut changé de R&D - En cours à R&D - Terminé

#14 Mis à jour par Emmanuel DILLARD il y a environ 4 ans

  • Projet changé de CURRENT SPRINT à Backlog

#15 Mis à jour par Emmanuel DILLARD il y a presque 3 ans

  • Projet changé de Backlog à Backlog Courrier
  • Version cible changé de 19.04 (Fin de vie) à 19.04 (Sécurité)

Formats disponibles : Atom PDF