SQL INSERT, ale unikaj duplikatów

Chcę zrobić kilka szybkich wstawek, ale unikać duplikatów w tabeli. Dla dobra argumentu nazwijmy to MarketPrices, eksperymentowałem z dwoma sposobami, ale nie wiem, jak testować, co będzie szybsze.

INSERT INTO MarketPrices (SecurityCode, BuyPrice, SellPrice, IsMarketOpen)
SELECT @SecurityCode, @BuyPrice,  @SellPrice, @IsMarketOpen
EXCEPT
SELECT SecurityCode, BuyPrice, SellPrice, j.bool as IsActive FROM MarketPrices
CROSS JOIN (SELECT 0 as bool UNION SELECT 1 as bool ) as j

LUB

DECLARE @MktId int
SET @MktId = (SELECT SecurityId FROM MarketPrices 
              where SecurityCode = @SecurityCode 
              and BuyPrice=@BuyPrice 
              and SellPrice = @SellPrice)

IF (@MktId is NULL)  
BEGIN
    INSERT INTO MarketPrices (SecurityCode, BuyPrice, SellPrice, IsMarketOpen)
    VALUES
    (@SecurityCode,@BuyPrice, @SellPrice, @IsMarketOpen)
END

Zakładać, że@whatever jest parametrem wejściowym w procedurze składowanej.

Chcę mieć możliwość wstawienia nowego rekordu dla każdego kodu zabezpieczeń, gdy cena kupna lub cena sprzedaży lub obie są różne od wszystkich poprzednich zdarzeń. Nie obchodzi mnie IsMarketOpen.

Czy jest coś rażąco głupiego w jednym z powyższych podejść? Czy jeden jest szybszy od drugiego?

questionAnswers(6)

yourAnswerToTheQuestion