Projet

Général

Profil

Actions

Anomalie #13162

fermé

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

Ajouté par Ludovic ARAUJO il y a presque 5 ans. Mis à jour il y a plus de 3 ans.

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

Description

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

Mis à jour par Ludovic ARAUJO il y a presque 5 ans

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

Mis à jour par Support Maarch il y a presque 5 ans

  • Statut changé de A qualifier à A traiter

Mis à jour par Emmanuel DILLARD il y a presque 5 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

Mis à jour par Emmanuel DILLARD il y a presque 5 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.

Mis à jour par Ludovic ARAUJO il y a plus de 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.

Mis à jour par Emmanuel DILLARD il y a plus de 4 ans

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

Mis à jour par Emmanuel DILLARD il y a plus de 4 ans

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

Mis à jour par Emmanuel DILLARD il y a plus de 4 ans

  • Projet changé de 298 à 299
  • Statut changé de R&D - A planifier à R&D - En cours

Mis à jour par Florian AZIZIAN il y a plus de 4 ans

  • Assigné à EDI PO supprimé

Mis à jour par Guillaume HEURTIER il y a plus de 4 ans

  • Assigné à mis à Guillaume HEURTIER

Mis à jour par Guillaume HEURTIER il y a plus de 4 ans

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

Mis à jour par Emmanuel DILLARD il y a plus de 4 ans

  • Projet changé de 299 à 298

Mis à jour par Emmanuel DILLARD il y a plus de 3 ans

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

Formats disponibles : Atom PDF