Robię coś podobnego, ale z redbrick, a nie serwerem sql. Oto moje spostrzeżenia:
Korzystanie z kwerendy przekazującej powoduje niewielką różnicę w wydajności. Jednak dane wyjściowe będą tylko do odczytu, co może, ale nie musi być tym, czego potrzebujesz.
Używanie projektanta zapytań dostępu, w pojedynczej tabeli, przy użyciu złożonego klucza podstawowego, może być błyskawiczne lub straszliwie wolne. Jeśli zapytanie nie zwróci żadnych wierszy, natychmiast otrzymasz pusty zestaw wyników. Jeśli jednak zapytanie zwróci dane, jest to inna historia.
W tym przykładzie użyto tabeli o nazwie clinic_fact z kluczem podstawowym o numerze rejestracyjnym i pozycji klatki. Ma około 6,5 miliona rekordów. Jeśli bezpośrednio prześlesz zapytanie do bazy danych, filtrując pojedynczy numer rejestracyjny, otrzymasz natychmiastowe wyniki. W dostępie uzyskanie wyników zajmuje ponad 10 sekund. W tym czasie zobaczę, jaki sql jest generowany. To wygląda tak.
select yourfields
from "clinic_fact"
where "registration_number" = 'something' and "clinic_position" = 2
or "registration_number" = 'something' and "clinic_position" = 1
or "registration_number" = 'something' and "clinic_position" = 1
or "registration_number" = 'something' and "clinic_position" = 1
or "registration_number" = 'something' and "clinic_position" = 1
or "registration_number" = 'something' and "clinic_position" = 1
or "registration_number" = 'something' and "clinic_position" = 1
or "registration_number" = 'something' and "clinic_position" = 1
or "registration_number" = 'something' and "clinic_position" = 1
or "registration_number" = 'something' and "clinic_position" = 1;
Ta kwerenda zwraca 2 wiersze. Pozycje kliniki to 1 i 2.
Takie rzeczy mogą, ale nie muszą wystąpić w przypadku SQL Server. Sugeruję, abyś spróbował i zobaczył.
Możesz użyć Profiler, aby pokazać polecenia, które są przekazywane do SQL Server. Jeśli chodzi o względną prędkość, możesz po prostu przetestować ją samodzielnie. –