Biorąc pod uwagę, że zapytanie jest już dość proste, opcje, których szukam, to ...
- Plan wykonania (aby znaleźć brakujące indeksy, które mógłbyś dodać)
- buforowanie (aby upewnić się, że SQL ma już wszystkie dane w pamięci RAM)
- denormalizacja (aby zmienić zapytanie na płaskie zaznaczenie)
- buforuj dane w aplikacji (abyś mógł użyć na niej czegoś takiego jak PLINQ)
- Użyj sklepu opartego na pamięci RAM (redis, Elastic)
- Dostosowania grupy plików (fizyczne przenoszenie bazy danych na szybsze dyski)
- Podziel swoje tabele na partycje (aby rozłożyć surowe dane na wielu fizycznych dyskach)
Im dalej idziesz w dół tej listy, tym bardziej zaangażowane stają się rozwiązania. Myślę, że zależy to od tego, jak szybko potrzebujesz zapytania i jak bardzo potrzebujesz skalowania rozwiązania.