Merci à tous pour votre aide. Après une longue période de lutte avec ce problème, la réponse de kaliatech m'a finalement aidé à déboguer le problème.
Tout d'abord, j'ai fait une terrible erreur dans ma question. J'ai écrit ça :
Exécuter cette requête avec une base de données locale est très rapide, mais l'utiliser à distance est vraiment médiocre.
Comme ce n'est pas tout à fait vrai. La requête que j'ai faite dans Hibernate ressemble à celle-ci :
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
Mais la requête réelle que j'ai faite avec SQL PLus ou Navicat par exemple était :
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
Veuillez noter que la première requête select commence :select s.* ...
et le second est select * ...
. Et c'était la raison de ces mauvaises performances. Maintenant, les deux requêtes sont terminées en un rien de temps. La question est de savoir quelle est la différence :problème de performances :différence entre select s.* et select *