To co napisał @Patryk27 może być wydajniejsze, ponieważ:
SELECT ...
FROM ...
WHERE u.userGroup IN ('1', '2', '3', '4', '6', '7')
-- to tak naprawdę:
SELECT ...
FROM ...
WHERE (
u.userGroup = '1' OR
u.userGroup = '2' OR
u.userGroup = '3' OR
u.userGroup = '4' OR
u.userGroup = '6' OR
u.userGroup = '7'
)
-- czyli w najgorszym wypadku masz 6 testów
-- użycie >= <= to tylko dwa testy (w naszym przypadku 3, bo 5 wykluczamy)
SELECT ...
FROM ...
WHERE u.userGroup >= 1 AND u.userGroup <= 7 AND u.userGroup <> 5
Użycie indeksu zależy też od wielu czynników. Np. indeks może nie być użyty, jeżeli baza danych na podstawie statystyk szacuje, że zostanie wyciągnięte więcej niz 15% całej tabeli (wtedy jej się to nie opłaca, bo użycie indeksu będzie bardziej kosztowne niż skanowanie całej tabeli).
Najlepiej jeżeli zapoznasz się z czymś co się nazywa explain plan. Wtedy będziesz wiedział jakie baza danych podjęła decyzję podczas wykonywania zapytania i będziesz mógł optymalizować.
Polecam książkę http://sql-performance-explained.com/ (tylko 10$ i 200 stron) i bloga autora http://use-the-index-luke.com/. Po przeczytaniu będziesz ekspertem do spraw optymalizacji zapytań ;)