title: My SQL query is way too slow... Someone can check if it is possible to simplfy it ? (SQL Server 2012)
body: <p>I built this query long ago and it worked well for a long time. Since a couple of weeks, it began to take like 4-5 secs before getting results from the server.</p>
  
  <p>Can you guys check if it is possible to simplify and/or optimize it ?</p>
  
  <pre><code>SELECT DISTINCT  
      SUIVI.administratif.no_suivi,
      SUIVI.administratif.mise_a_jour,
      SUIVI.administratif.date_installation,
      SUIVI.administratif.client_initial,
      SUIVI.actions.type_action,
      type_commande.type_commande,
      SUIVI.type_service.nom_service,
      SUIVI.administratif.statut_suivi,
      SUIVI.administratif.date_received,
      SUIVI.administratif.date_recette,
      SUIVI.administratif.priorite,
      bidon,
      SUIVI.administratif.adresse + ' ' + SUIVI.administratif.ville + ' ' + SUIVI.administratif.code_postal + ' ' + SUIVI.administratif.province AS adresse,
      SUIVI.administratif.derniere_rev,
      SUIVI.administratif.type_de_suivi,
      SUIVI.administratif.date_received_enhanced,
      STUFF((SELECT ' / ' + DESIGN.no_references.no_reference
             FROM DESIGN.no_references
             WHERE DESIGN.no_references.no_suivi = SUIVI.administratif.no_suivi
               AND (DESIGN.no_references.type_reference = 'FOX'
                    OR DESIGN.no_references.type_reference = 'SRT'
                    OR DESIGN.no_references.type_reference = 'OS'
                    OR DESIGN.no_references.type_reference = 'BC'
                    OR DESIGN.no_references.type_reference = 'TTO')
             ORDER BY no_reference
             FOR xml path('')), 1, 3, '') AS no_references
  FROM   
      (((SUIVI.administratif
  INNER JOIN 
      SUIVI.actions ON SUIVI.administratif.no_action = SUIVI.actions.no_action)
  INNER JOIN 
      SUIVI.type_commande ON SUIVI.administratif.type_commande = SUIVI.type_commande.no_type_commande)
  INNER JOIN 
      SUIVI.type_service ON SUIVI.administratif.type_service = SUIVI.type_service.no_service)
  WHERE
      ((adresse_z LIKE '%test%')
       OR (adresse LIKE '%test%')
       OR (client_initial LIKE '%test%')
       OR (type_action LIKE '%test%')
       OR (type_commande.type_commande LIKE '%test%')
       OR (ville_z LIKE '%test%')
       OR (ville LIKE '%test%')
       OR (nom_service LIKE '%test%')
       OR (SUIVI.administratif.no_suivi LIKE '%test%'))
     AND SUIVI.administratif.statut_suivi &lt;&gt; 'Exclu'
  
  UNION
  
  SELECT DISTINCT SUIVI.administratif.no_suivi
                  , SUIVI.administratif.mise_a_jour
                  , SUIVI.administratif.date_installation
                  , SUIVI.administratif.client_initial
                  , SUIVI.actions.type_action
                  , type_commande.type_commande
                  , SUIVI.type_service.nom_service
                  , SUIVI.administratif.statut_suivi
                  , SUIVI.administratif.date_received
                  , SUIVI.administratif.date_recette
                  , SUIVI.administratif.priorite
                  , bidon
                  , SUIVI.administratif.adresse + ' '
                    + SUIVI.administratif.ville + ' '
                    + SUIVI.administratif.code_postal + ' '
                    + SUIVI.administratif.province AS adresse
                  , SUIVI.administratif.derniere_rev
                  , SUIVI.administratif.type_de_suivi
                  , SUIVI.administratif.date_received_enhanced
                  , Stuff((SELECT ' / ' + DESIGN.no_references.no_reference
                           FROM   DESIGN.no_references
                           WHERE  DESIGN.no_references.no_suivi = SUIVI.administratif.no_suivi
                              AND ( DESIGN.no_references.type_reference = 'FOX'
                                     OR DESIGN.no_references.type_reference = 'SRT'
                                     OR DESIGN.no_references.type_reference = 'OS'
                                     OR DESIGN.no_references.type_reference = 'BC'
                                     OR DESIGN.no_references.type_reference = 'TTO' )
                           ORDER  BY no_reference
                           FOR xml path('')), 1, 3, '') AS no_references
  FROM   SUIVI.administratif
         INNER JOIN SUIVI.commandes_equipements ON SUIVI.administratif.no_suivi = SUIVI.commandes_equipements.no_suivi
         INNER JOIN SUIVI.actions ON SUIVI.administratif.no_action = SUIVI.actions.no_action
         INNER JOIN SUIVI.type_commande ON SUIVI.administratif.type_commande = SUIVI.type_commande.no_type_commande
         INNER JOIN SUIVI.type_service ON SUIVI.administratif.type_service = SUIVI.type_service.no_service
  WHERE  ( rapport_sap LIKE '%test%' )
     AND SUIVI.administratif.statut_suivi &lt;&gt; 'Exclu'
  UNION
  SELECT DISTINCT SUIVI.administratif.no_suivi
                  , SUIVI.administratif.mise_a_jour
                  , SUIVI.administratif.date_installation
                  , SUIVI.administratif.client_initial
                  , SUIVI.actions.type_action
                  , type_commande.type_commande
                  , SUIVI.type_service.nom_service
                  , SUIVI.administratif.statut_suivi
                  , SUIVI.administratif.date_received
                  , SUIVI.administratif.date_recette
                  , SUIVI.administratif.priorite
                  , bidon
                  , SUIVI.administratif.adresse + ' '
                    + SUIVI.administratif.ville + ' '
                    + SUIVI.administratif.code_postal + ' '
                    + SUIVI.administratif.province AS adresse
                  , SUIVI.administratif.derniere_rev
                  , SUIVI.administratif.type_de_suivi
                  , SUIVI.administratif.date_received_enhanced
                  , Stuff((SELECT ' / ' + DESIGN.no_references.no_reference
                           FROM   DESIGN.no_references
                           WHERE  DESIGN.no_references.no_suivi = SUIVI.administratif.no_suivi
                              AND ( DESIGN.no_references.type_reference = 'FOX'
                                     OR DESIGN.no_references.type_reference = 'SRT'
                                     OR DESIGN.no_references.type_reference = 'OS'
                                     OR DESIGN.no_references.type_reference = 'BC'
                                     OR DESIGN.no_references.type_reference = 'TTO' )
                           ORDER  BY no_reference
                           FOR xml path('')), 1, 3, '') AS no_references
  FROM   SUIVI.administratif
         INNER JOIN SUIVI.liste_ckts_par_suivi ON SUIVI.liste_ckts_par_suivi.no_suivi = SUIVI.administratif.no_suivi
         INNER JOIN SUIVI.actions ON SUIVI.administratif.no_action = SUIVI.actions.no_action
         INNER JOIN SUIVI.type_commande ON SUIVI.administratif.type_commande = SUIVI.type_commande.no_type_commande
         INNER JOIN SUIVI.type_service ON SUIVI.administratif.type_service = SUIVI.type_service.no_service
  WHERE  ( SUIVI.liste_ckts_par_suivi.no_ckt LIKE '%test%'
           AND SUIVI.liste_ckts_par_suivi.discard = 0 )
     AND SUIVI.administratif.statut_suivi &lt;&gt; 'Exclu'
  UNION
  SELECT DISTINCT SUIVI.administratif.no_suivi
                  , SUIVI.administratif.mise_a_jour
                  , SUIVI.administratif.date_installation
                  , SUIVI.administratif.client_initial
                  , SUIVI.actions.type_action
                  , type_commande.type_commande
                  , SUIVI.type_service.nom_service
                  , SUIVI.administratif.statut_suivi
                  , SUIVI.administratif.date_received
                  , SUIVI.administratif.date_recette
                  , SUIVI.administratif.priorite
                  , bidon
                  , SUIVI.administratif.adresse + ' '
                    + SUIVI.administratif.ville + ' '
                    + SUIVI.administratif.code_postal + ' '
                    + SUIVI.administratif.province AS adresse
                  , SUIVI.administratif.derniere_rev
                  , SUIVI.administratif.type_de_suivi
                  , SUIVI.administratif.date_received_enhanced
                  , Stuff((SELECT ' / ' + DESIGN.no_references.no_reference
                           FROM   DESIGN.no_references
                           WHERE  DESIGN.no_references.no_suivi = SUIVI.administratif.no_suivi
                              AND ( DESIGN.no_references.type_reference = 'FOX'
                                     OR DESIGN.no_references.type_reference = 'SRT'
                                     OR DESIGN.no_references.type_reference = 'OS'
                                     OR DESIGN.no_references.type_reference = 'BC'
                                     OR DESIGN.no_references.type_reference = 'TTO' )
                           ORDER  BY no_reference
                           FOR xml path('')), 1, 3, '') AS no_references
  FROM   SUIVI.administratif
         INNER JOIN DESIGN.no_references ON DESIGN.no_references.no_suivi = SUIVI.administratif.no_suivi
         INNER JOIN SUIVI.actions ON SUIVI.administratif.no_action = SUIVI.actions.no_action
         INNER JOIN SUIVI.type_commande ON SUIVI.administratif.type_commande = SUIVI.type_commande.no_type_commande
         INNER JOIN SUIVI.type_service ON SUIVI.administratif.type_service = SUIVI.type_service.no_service
  WHERE  ( DESIGN.no_references.no_reference LIKE '%test%'
            OR DESIGN.no_references.CSID LIKE '%test%' )
     AND SUIVI.administratif.statut_suivi &lt;&gt; 'Exclu'; 
  </code></pre>