You are correct, it is more WHERE conditions. In the original query I did have those values as more WHERE, but I am attempting to speed up the processing.
I started looking at the data, and found the query was doing A LOT of process/retrieving of data that was later thrown on the floor. If I could make the query use the Account.Type first, I would eliminate extra time joining other (large) tables.
You are correct, that where clause is not exactly right (as this is not my real SQL, but a representation of what I was doing)
Should've been:
select Account.Name, Account.State, Transaction.Amt, Transaction.Date, Transaction.Service
from Transaction
left join Account
on Account.Id = Transaction.Account
where Transaction.Account in (
Select Account.Id
from Account
where Account.Type is not null
and Account.Id>123456789
and Account.Id<=323456789
)
and Transaction.Date >= ?
and Transaction.Date <= ?
I attempted to use '%NOFLATTEN', which changed the 'show plan', but the range is not acknowledged in the plan, showed 'looping on'.
I also ran a real SQL and watched via JOBEXAM and the process started with 0.
I found that my Account.Id is looping because that is a calculated value (multiple properties combined into one).