Buongiorno a tutti.

Ho un trigger che cerca di forzare una regola la quale impone che un certo record non abbia doppioni in un certo range di tempo.

In altre parole ho una tabella T con i campi (C1,C2,C3,RangeStart,RangeEnd,C4,C5...,CN), voglio forzare la regola seguente:


Non possono esistere due record con identici C1,C2,C3 per i quali ci sia una sovrapposizione di date di validità


Esempio

Se la tabella contiene un record con Range Start '2012-01-01', Range End '2012-01-31' e l'utente vuole inserire un nuovo record con C1,C2,C3 identici al precedente record ma con Range Start = '2012-02-01',Range End='2012-02-29' l'inserimento va a buon fine, se invece l'utente inserisce un record con RangeStart='2011-12-20',RangeEnd='2012-01-14' l'inserimento fallisce perchè il range di date di questo record si sovrappone per 14 giorni al record già esistente.


Ho quindi creato la vista V_DOPPIONI che restituisce tutti i records che violano la regola di cui sopra.

Nella tabella T ho aggiunto il seguente trigger

codice:
CREATE TRIGGER [dbo].[T_NO_DOPPIONI]
   ON T
   FOR INSERT, UPDATE 
AS 
BEGIN
	
    SET NOCOUNT ON

    IF EXISTS ( SELECT * FROM  V_DOPPIONI ) 
    BEGIN
        RAISERROR('CANNOT HAVE SAME VALUES OVERLAPPING DATETIME RANGES, PLEASE CHECK DATE AND TIME RANGES', 16,1)
        ROLLBACK
    END		
END
Il tempo di escuzione del trigger è inaccettabile.

Il problema è che la vista V_DOPPIONI ritorna in tempo zero, aggiungendo IF EXISTS il tempo di esecuzione supera i 40 secondi, mi chiedo come sia possibile, dal momento che nel peggiore dei casi il motore di database dovrebbe metterci un nanosecondo in piu rispetto al caso dell'esecuzione completa della query.

Per riepilogare il mio problema attuale è il seguente:

codice:
SELECT  * FROM v_doppioni --tempo esecuzione 0 secondi

IF EXISTS(SELECT * FROM v_doppioni) BEGIN PRINT 'ESISTONO DOPPIONI' END -- 40 secondi e oltre.
Quale costrutto alternativo posso utilizzare per imporre la condizione di cui sopra alla mia tabella T o in alternativa come posso fare a rendere veloce la clausola IF EXISTS?

Grazie a tutti.