Mam kilka identyfikatorów wstawiane do tabeli temp #A
następująco:Dwa zapytania. Ten sam wynik. Jeden zajmuje 2 godziny, a drugi 0 sekund. Czemu?
SELECT DISTINCT ID
INTO #A
FROM LocalDB.dbo.LocalTable1
WHERE ID NOT IN (SELECT DISTINCT ID FROM LocalDB.dbo.LocalTable2)
GO
CREATE INDEX TT ON #A(ID)
GO
Próbuję uzyskać pewne informacje ze zdalnego serwera połączonego za pomocą identyfikatorów Zebrałem w poprzednim etapie:
Query 1:
SELECT ID, Desc
FROM RemoteLinkedServer.DB.dbo.RemoteTable X
WHERE ID IN (SELECT ID FROM #A)
Zapytanie 2:
SELECT ID, Desc
FROM RemoteLinkedServer.DB.dbo.RemoteTable X
INNER JOIN #A Y
ON X.ID = Y.ID
Teraz, w poniższym zapytaniu, robię to, uzyskując dane wyjściowe tabeli tymczasowej, skopiuj wiersze i sformatuj je poprawnie na listę oddzielaną przecinkami i ręcznie wstaw ją do zapytania.
Zapytanie 3:
SELECT ID, Desc
FROM RemoteLinkedServer.DB.dbo.RemoteTable X
WHERE ID IN (-- Put all identifiers here --)
zapytania 1
i 2
się przez 2 godziny do wykonania i wykonuje zapytanie 3
0 s (my tabela zawiera temperatury około 200 wiersze). Nie wiem, co się dzieje i nie mam uprawnień do sprawdzenia, czy serwer zdalny ma odpowiednie indeksy na ID, ale jest po prostu kłopotliwy, gdy zobaczy, że ręcznie utworzone zapytanie uruchamia się w krótkim czasie, wskazując, że coś jest nie tak w fazie optymalizacji zapytania.
Jakieś pomysły na temat tego, co się tutaj nie zgadza lub jak mogę przyspieszyć moje zapytanie?
+1 Szczerze mówiąc, nie wiem! Dziękuję za wyjaśnienie. Jak więc wysłać moje lokalne wartości do zdalnego serwera połączonego i otrzymać wyniki? 'CURSOR's, a następnie wysłać jeden identyfikator na raz? Zdalny stół jest ogromny z około 10 milionami wierszy. – Legend
Prawdopodobnie najlepszym rozwiązaniem jest dynamiczne budowanie sql do wykonania na serwerze zdalnym i po prostu WYKONUJ.Odkryliśmy, że ta metoda jest o wiele szybsza w przypadku każdego rodzaju połączenia, które wykonujemy z połączonymi serwerami. Używanie kursora, a następnie uruchamianie jednego zapytania naraz może spowodować przekroczenie limitów prędkości transakcji; której możesz nie chcieć. – NotMe
Dziękuję za sugestię. Nie ma więcej wąskich gardeł i mój skrypt działa dobrze z tą optymalizacją. – Legend