0
votes

Sous-requête prenant trop de temps dans le serveur PostgreSQL

J'ai une requête qui prend beaucoup de temps à exécuter. Je ne sais pas comment puis-je réduire ceci. Non seulement la durée de cette requête prend également une utilisation PSQL à High CPU.

Je dois sélectionner une colonne unique sip_username comme des noms différents sur différentes conditions. En raison de cette exigence, j'ai créé des sous-requêtes,

La requête est la suivante: xxx

Que dois-je changer pour rendre cela plus rapide?


7 commentaires

Veuillez supprimer Tag: SQL-Server .


Veuillez exécuter la requête avec le préfixe Expliquer (analyser, tampons) et ajouter la sortie à votre question. Cela vous aidera à vous montrer comment résoudre vous-même des questions similaires à l'avenir.


Quelle est la clé primaire du tableau admin_users_product ? Est-ce que la condition a.location_id = 18 renvoie plusieurs lignes avec différents produit_code et sip_username valeurs?


Pourriez-vous poster des échantillons de données et une sortie attendue pour eux? Il serait beaucoup plus facile de vous aider.


Vos sous-demandes n'ont pas de sens. La condition de renvoi de la ligne est sip_username = A.SIP_USName de sorte que le SIP_USName renvoyé pour chaque sous-requête sera identique à celui de A.SIP_USNAME - que vous avez déjà . Donc, je ne comprends pas ce que vous essayez de réaliser avec les sous-demandes. On dirait que vous pouvez facilement les supprimer


@A_HORSE_WITH_NO_NAME Touche principale est ID et A.Location = 18 retournera plusieurs rangées avec un code de produit différent


Mais l'affichage du sip_username n'a pas vraiment de sens alors, comme cela sera toujours le même nom d'utilisateur que celui indiqué dans la liste de sélection "principale"


3 Réponses :


1
votes

Vous devez créer un index sur une colonne

  1. Créer une index sur Admin_USERS_PRODUCT TABLE TABLE SUR EMPLACEMENT_IDE ET SIP_USERNAME COLONNES
  2. Créer une index sur Admin_USERS_PRODUCT TABLE SUR SIP_USERNAME et COLONNES DECODE DECODE

    Et puis vous interrogez-vous plus rapidement ...


0 commentaires

1
votes

Vous pouvez essayer ce code:

SELECT sip_username,
   product_code,
   display_name as dname,
   user_id      as uid,
   location_id,
   tenant_id,
   (CASE product_code
        WHEN 'bizfms' THEN
            sip_username
        ELSE Null
       END)     AS bizfms_username,
   (CASE product_code
        WHEN 'mlc' THEN
            sip_username
        ELSE Null
       END)     AS mlc_username,
   (CASE product_code
        WHEN 'bizrtm' THEN
            sip_username
        ELSE Null
       END)     AS bizrtm_username
  FROM admin_users_product AS A
  WHERE A.location_id = 18


0 commentaires

1
votes

Vous pouvez essayer ceci. Cas n'existe pas d'index, vous devez créer comme malcioné par miamiq abdullayev. xxx


0 commentaires