Gracias a todos por la ayuda. Después de mucho tiempo de luchar con ese problema, finalmente la respuesta de kaliatech me ayudó a solucionar el problema.
En primer lugar, he cometido un terrible error en mi pregunta. Escribí eso:
Ejecutar esta consulta con la base de datos local es realmente rápido, pero usarla de forma remota es realmente pobre.
Como no es del todo cierto. La consulta que hice en Hibernate se parece a la anterior:
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
Pero la consulta real que hice con SQL PLus o Navicat, por ejemplo, fue:
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
Tenga en cuenta que la selección de la primera consulta comienza:select s.* ...
y el segundo es select * ...
. Y esa fue la razón de tan bajo rendimiento. Ahora ambas consultas se completan en poco tiempo. La pregunta es, cuál es la diferencia:problema de rendimiento:diferencia entre select s.* vs select *