mssql pytanie o execution plan

0

Witam wszystkich,

Mam pytanie które mnie dręczy mianowicie mam dwa zapytania które wypisują 3 rekordy z bazy i sprawdzam je wykorzystując query execution plan z non-clustered index i bez indeksów. I teraz otrzymuje dla zapytania:

  • pierwszego zapytania bez indeksów : Query cost 42%
  • pierwszego zapytania z non-clustered index : Query cost 28%

Tą część rozumiem dlaczego wyszły takie koszta.

Teraz dla zapytania drugiego:

  • bez indeksu: Query cost 58%
  • z non-clustered index: Query cost: 72%

Dlaczego w tym drugim przypadku koszt zapytania bez indeksu jest mniejszy(58%) niż z indeksem? Oto
Czy stosowanie Joinów tak wpływa na koszta zapytania?

SELECT TOP 3 CENA FROM PRODUKT ORDER BY CENA DESC

SELECT DISTINCT A.CENA
FROM PRODUKT A 
JOIN PRODUKT B ON A.CENA<=B.CENA
GROUP BY A.CENA
HAVING COUNT(*)<=3
ODRER BY A.CENA DESC

Będę wdzięczny za uzasadnienie mojego dylematu.

0

jakie są indeksy na tych tabelach?
i jak wygląda cały execution plan a nie podałeś tylko query cost

0

porównaj plany wykonania, tam zobaczysz jak optymalizator przetworzył zapytania, co faktycznie zostało wykonane i czym się różni.
prawdopodobnie optymalizator tak przetworzył zapytanie, żeby skorzystać z indeksów, chociaż w niczym mu nie pomogły. na ilu rekordach testowałeś to zapytanie? chcesz mieć reprezentatywne wyniki, użyj dużej ilości danych (kilkaset tysięcy-kilka milionów); przy małej ilości czasem dzieją się pozornie nielogiczne rzeczy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1