Powolne działanie UNION ALL (mssql)

0

Dzień dobry wszystkim!

Mam dwa zapytania, które pojedynczo wykonują się w 1-2 sekundy, ale kiedy połączę je operatorem UNION ALL to trwa to kilkanaście sekund. Czy da się coś z tym zrobić?

1

Hm, jest to sprzeczne z moją (skromną) wiedzą bazodanową. Na pewno jest to UNION ALL a nie UNION? Sprawdzałeś plan zapytania? Jak duże są wyniki i tabele? Może brakuje RAMu żeby to wszystko przetworzyć?

Typy w rezultacie są takie same w obu zapytaniach? Może zachodzi jakaś konwersja typów? (Pamiętam że w brzydkiej bazie na O typy nie mają znaczenia w rezultacie, a w PostgreSQLu - mają. Nie wiem jak jest w MSSQL)

0

Tak, na pewno UNION ALL.
Niestety, nie mam w tej chwili dostępu do planu zapytania.
Jedno z zapytań korzysta z widoku na Linked Serverze, ale wywołane pojedynczo wykonuje się w sekundę. Zwraca 85 rekordów. Drugie, lokalne, około 2 sekundy, zwraca ok. 1000 rekordów. Tabele też nie są jakieś kosmicznie duże. UNION ALL trwa 18 sekund. Dlaczego po prostu nie łączy tych dwóch wyników?
Typy, jak mi się wydaje, są zgodne, stosuję COLLATE SQL_Latin1_General_CP1_CI dla kolumn tekstowych z Linked Servera, może to robię źle?

0

Zgaduj zgadula ... a na przykład sortowanie złączonych wyników na tak mieszanej technologii ... HGW czy powstaje jakaś tabela tymczasowa ...
(napisałem w konwencji "do kawy", którą teraz piję, przypuszczeń można mieć wiele)

2

A czy za każdym razem wyciaga ci wszytkie dane przy tych pojedynczych zapytaniach? Moze byc tak ze pojedyncze zapytania nie wyciagaja wszystkiego a operator union all to wymusza. Pytanie jak sprawdziles te czasy, czym je mierzyłeś.

0

Suma wierszy zwróconych w pojedynczych zapytaniach daje liczbę wierszy z UNION ALL, to te same dane.
Czasy z query wywołanego w Managenment Studio.

0
dcy napisał(a):

Suma wierszy zwróconych w pojedynczych zapytaniach daje liczbę wierszy z UNION ALL, to te same dane.
Czasy z query wywołanego w Managenment Studio.

Ms zlicza rekordy nke koniecznie je wyciągając

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