2009-12-17 2 views
0

Je vais avoir quelques problèmes avec la requête suivante:Problèmes avec une requête Union avec un champ d'image/varbinary

SELECT v.idnum 
     ,v.full_name 
     ,convert(varbinary(max),s.signature) as Sig 
FROM   AppDB.dbo.v_People1 AS v INNER JOIN 
         OtherDB.dbo.Signatures AS s ON v.idnum = s.idnum 

UNION 

SELECT v.idnum 
    , v.full_name 
    , convert(varbinary(max), s.signature) as Sig 
FROM   AppDB.dbo.v_People2 AS v INNER JOIN 
         AppDB.dbo.Signatures AS s ON v.idnum = s.idnum 

Quand je les dirige chacune des requêtes séparément sans l'union ils exécutent rapidement (< 5 secondes), mais lorsque je l'exécute en utilisant l'union, il faut une éternité pour l'exécuter (tout ce qu'il dit est en cours d'exécution, je ne l'ai pas vu fonctionner)

Dans OtherDB.dbo.Signatures, le champ de signature est un varbinary (max) et dans AppDB.dbo.Signatures le champ est une image qui est pourquoi j'utilise l'expression de conversion. Est-ce que quelqu'un sait ce que le problème pourrait être et comment je peux y remédier?

Merci

Répondre

1

Je me demande si c'est parce que vous utilisez un UNION au lieu d'un UNION ALL. UNION supprime à lui seul les lignes dupliquées entre les ensembles de données. Cela peut causer un retard sur votre champ blob. Voir s'il y a une différence en utilisant UNION ALL.

+0

Ceci l'a corrigé. Merci! Pourquoi vérifier si une ligne était en double rend la tâche beaucoup plus lente? Il n'y avait que 40 lignes dans la première requête et environ 10 lignes dans la seconde – zSynopsis

+1

Cela a à voir avec votre champ de blob, ils ne sont pas vraiment comparables (on ne peut pas non plus utiliser un DISTINCT), donc il était logique que l'UNION étouffer dessus. Je peux chercher une explication plus technique. – Brettski