Dziękuję wszystkim za pomoc. Po długim czasie zmagania się z tym problemem, w końcu odpowiedź kaliatech pomogła mi rozwiązać problem.
Przede wszystkim popełniłem w swoim pytaniu straszny błąd. Napisałem, że:
Uruchamianie tego zapytania z lokalną bazą danych jest naprawdę szybkie, ale używanie go zdalnie jest naprawdę słabe.
Bo to nie do końca prawda. Zapytanie, które wykonałem w Hibernate, wygląda tak samo:
select s.* from sales_unit s left join sales_unit_relation r on (s.sales_unit_id = r.sales_unit_child_id) where r.sales_unit_child_id is null
Ale rzeczywiste zapytanie, które wykonałem na przykład w SQL PLus lub Navicat, brzmiało:
select * from sales_unit s left join sales_unit_relation r on (s.sales_unit_id = r.sales_unit_child_id) where r.sales_unit_child_id is null
Proszę zauważyć, że pierwsze zapytanie select zaczyna się:select s.* ...
a drugi to select * ...
. I to było przyczyną tak kiepskich wyników. Teraz oba zapytania są realizowane w mgnieniu oka. Pytanie brzmi, jaka jest różnica:problem z wydajnością:różnica między select s.* a select *