I have a (simplified) query like so:
SELECT DISTINCT this_.person_id AS y0_
FROM coded_entity this_
WHERE this_.code = ?
AND this_.tenant_id = ?
AND this_.person_id IN (SELECT person_id
FROM person that
WHERE that.date_voided IS NULL
AND that.ssn = ?
AND that.tenant_id = ? )
I would like to be able to force Oracle to always execute the innermost subquery first because I know it will always be more selective. Code only has a few values whereas the ssn has a far greater multitude. Each table will have the same number of rows.
However, in actual practice, sometimes the Oracle CBO decides to execute the coded_entity query first, causing much slower times.
Is there a way to force this behavior without splitting up the query into separate calls?