Skip to Main Content

Breadcrumb

Question and Answer

Chris Saxon

Thanks for the question, Anthony.

Asked: September 16, 2016 - 3:28 pm UTC

Last updated: September 19, 2016 - 4:40 pm UTC

Version: 11g standard

Viewed 10K+ times! This question is

You Asked

I asked this in a "review" of a related question ( https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9531768700346881365 ) but it may have been considered slightly off topic so here it is by itself.

I was a SQL Server developer for 4+ years; been an Oracle developer for about a month. One of the things that surprised me most is Oracle's lack of local temp tables.

That said, I was tasked with improving the performance of a 600+ line query that had 17 correlated subqueries with aggregations (14 scalar ones in the select). In the interest of adhering to the prevailing Oracle wisdom "I agree that you shouldn't use a temporary table if you can use an inline view or a with subquery. that is - don't fall into a sqlserver programmer paradigm in Oracle - it is OK to join lots of tables in a single query - we prefer that," found here ( https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:5824706700346810645 ) and many other places on the Internet, I first tried avoiding GTTs.

I read about scalar subquery caching. It doesn't sound all that efficient for significantly more than 255 records, so I first took the approach of taking each aggregation, turning it into a stand-alone (non-correlated) sub-query (either in a CTE or in the where clause) so we could use joins instead of going RBAR. There was a modest 50% reduction in execution time; from 1hr 12min to 34 min in one example.

with my_targ_pop as (select id1, id2 ...)
select col1, agg1.sum, nvl(agg2.sum,0)...
from my_targ_pop
join (sum(col)...) agg1
left join (sum(col)...) agg2
...


Then I noticed (the data model is still relatively new to me) that nearly every subquery ran isolated as a standalone query in a second or less. I tried using the exact same subqueries with indexed GTTs:

delete gtt1;
delete gtt2;

insert into gtt1
select sum()...;
insert into gtt2
select sum()...;
insert into gtt2
select another sum()...;
...

select col1, col2...
from gtt1
left join gtt2 on something...
left join gtt2 on something else...
...


Total execution time dropped from 1hr 12min to < 7 sec.

In order to make this work in Prod I had to find someone with the rights to create and alter any (even permanent) tables so they could run my GTT create scripts. Then they had to explicitly grant me permissions to insert and delete.

I'm incredibly surprised that I need to go through all that in order to efficiently generate this ad-hoc report. Am I missing something? Any ideas you might suggest as a viable alternative to using GTTs in this manner (short of building a data warehouse)?

and Connor said...

Since gtt1,gtt2,...gtt'n' worked for you, why didnt you do:

with 
  gtt1 as ( select /*+ materialize */ .... ),
  gtt2 as ( select /*+ materialize */ .... ),
  gtt3 as ( select /*+ materialize */ .... ),
  gtt4 as ( select /*+ materialize */ .... )
  etc
select 
  ... 
from  gtt1 left join gtt2 etc etc etc etc


If those temporary result sets are huge, and you need indexes on them...then yes, you would need to go down the dictionary-defined global temp table route.

Rating

  (14 ratings)

Is this answer out of date? If it is, please let us know via a Comment

Comments

Materialize

Anthony Munoz, September 19, 2016 - 2:44 pm UTC

New numbers from a different example today:

Original query: 8m 32s
Sub-query rewrite: 4m 44s
Indexed GTT: 5s
Materialized: ??? I killed it after 14 minutes

I did absolutely nothing other than change each 'select col1...' to 'select /*+ materialize */ col1...'. And I'm not sure how you define "huge" but ultimately the 3 GTTs have 2900, 11165, and 4185 records, which I'd consider small.

So you're basically saying short of using the undocumented 'materialize' hint (which made it perform significantly worse in this case) there's likely nothing more I could have done to optimize this query without finding someone who has the 'create any table' and 'alter any table' permissions, along with the ability to specifically grant me insert, update, and delete permissions on the new GTTs? Those are potentially HUGE hurdles to overcome depending on the environment you're working in and the permissions you're working with.

I'm really not understanding Oracle's decision to not include local temp tables. As an Oracle newbie I'm feeling really hamstrung by this and really trying understand what my options are.

Any other suggestions?
Chris Saxon
September 19, 2016 - 4:40 pm UTC

OK, can we *see* all of the queries, and the execution plans for these.


Query 1 Original (1 of 8)

Anthony Munoz, September 19, 2016 - 6:11 pm UTC

I left off the UNION'ed queries as they're relatively inconsequential in terms of performance.

QUERY (Total execution time 21.704 sec.):

WITH jobs AS
  ( SELECT DISTINCT policy.job_id, eo.offering_id, psi.invoice_id, eo.employerplanyear_id
  FROM cycowner.b_journal j
    JOIN cycowner.b_posting p1          ON p1.journal_id  = j.id
    JOIN cycowner.b_posting p2          ON p2.journal_id  = j.id AND p1.id<>p2.id
    JOIN cycowner.b_account acc_p1      ON acc_p1.id      = p1.account_id
    JOIN cycowner.b_account acc_p2      ON acc_p2.id      = p2.account_id
    JOIN cycowner.b_policyjournal pj    ON pj.journal_id  = j.id
    JOIN cycowner.p_policy policy       ON policy.id      = pj.policy_id
    JOIN cycowner.b_paysiteinvoice psi  ON psi.invoice_id = p2.invoice_id
    JOIN cycowner.m_employeroffering eo ON eo.id          = policy.employeroffering_id
  WHERE p2.invoice_id                          = 2181230
  )
SELECT er.name AS EmployerName, jobs.invoice_id AS InvoiceNumber, person.first_name firstName, person.last_name lastName,
  person.ssn, ('xxx-xx-' || person.last_four_ssn) AS last_four_ssn, jb.external_employee_id AS EmployerEmployeeID,
  jb.partner_employee_id AS PartnerEmployeeID, jb.division AS Division1, jb.division2 AS Division2, jb.division3 AS Division3,
  jb.division4 AS Division4, ps.name AS PaysiteName, (SELECT alternate_id
  FROM cycowner.m_offering
  WHERE id = jobs.offering_id
  ) AS AccountType,
  CASE
    WHEN jb.coverage_level = 'F'
    THEN 'Family'
    WHEN jb.coverage_level = 'S'
    THEN 'Single'
    ELSE ''
  END AS CoverageLevel, jst.name AS Status, TO_CHAR(js.vt_begin,'MM/dd/yyyy') AS EmployeeEffectiveDate,
  CASE
    WHEN js.status = 2
    THEN TO_CHAR(js.vt_begin,'MM/dd/yyyy')
    ELSE ''
  END AS TermDate, NVL(
  (SELECT SUM(premiums.premium)
  FROM cycowner.p_policy pp
  JOIN cycowner.m_employeroffering eo  ON eo.id              = pp.employeroffering_id
  JOIN cycowner.m_employerplanyear epy ON epy.id             = eo.employerplanyear_id
  JOIN cycowner.p_premium premiums     ON premiums.policy_id = pp.id
  WHERE pp.job_id                                   = jobs.job_id
    AND eo.offering_id                              = jobs.offering_id
    AND eo.employerplanyear_id                      = jobs.employerplanyear_id
    AND eo.billingsource_id                         = 122
    AND premiums.tt_start                          <= CURRENT_TIMESTAMP
    AND premiums.tt_stop                            > CURRENT_TIMESTAMP
  ),0) AS EmployerAnnualElection, NVL(
  (SELECT SUM(premiums.premium)
  FROM cycowner.p_policy pp
  JOIN cycowner.m_employeroffering eo  ON eo.id              = pp.employeroffering_id
  JOIN cycowner.m_employerplanyear epy ON epy.id             = eo.employerplanyear_id
  JOIN cycowner.p_premium premiums     ON premiums.policy_id = pp.id
  WHERE pp.job_id                                   = jobs.job_id
    AND eo.offering_id                              = jobs.offering_id
    AND eo.employerplanyear_id                      = jobs.employerplanyear_id
    AND eo.billingsource_id                         = 121
    AND premiums.tt_start                          <= CURRENT_TIMESTAMP
    AND premiums.tt_stop                            > CURRENT_TIMESTAMP
  ),0) AS EmployeeAnnualElection,
  NVL(
  (SELECT SUM(premiums.premium)
  FROM cycowner.p_policy pp
  JOIN cycowner.m_employeroffering eo  ON eo.id              = pp.employeroffering_id
  JOIN cycowner.m_employerplanyear epy ON epy.id             = eo.employerplanyear_id
  JOIN cycowner.p_premium premiums     ON premiums.policy_id = pp.id
  WHERE pp.job_id                                   = jobs.job_id
    AND eo.offering_id                              = jobs.offering_id
    AND eo.employerplanyear_id                      = jobs.employerplanyear_id
    AND premiums.tt_start                          <= CURRENT_TIMESTAMP
    AND premiums.tt_stop                            > CURRENT_TIMESTAMP
  ),0) AS TotalAnnualElection,
  NVL(
  (SELECT SUM(cr.amount)
  FROM cycowner.b_journal j12
  JOIN cycowner.b_contributionjournal cj ON cj.journal_id    = j12.id
  JOIN cycowner.b_contributionrecord cr  ON cr.id            = cj.contribution_id
  JOIN cycowner.b_posting p12            ON p12.journal_id   = j12.id
  JOIN cycowner.b_posting p122           ON p122.journal_id  = j12.id AND p12.id<>p122.id
  JOIN cycowner.b_account acc_p12        ON acc_p12.id       = p12.account_id
  JOIN cycowner.b_account acc_p122       ON acc_p122.id      = p122.account_id
  JOIN cycowner.b_policyjournal pj12     ON pj12.journal_id  = j12.id
  JOIN cycowner.p_policy policy12        ON policy12.id      = pj12.policy_id
  JOIN cycowner.b_paysiteinvoice psi12   ON psi12.invoice_id = p122.invoice_id
  JOIN cycowner.m_employeroffering eo12  ON eo12.id          = policy12.employeroffering_id
  WHERE p122.invoice_id                             = jobs.invoice_id
    AND policy12.job_id                             = jobs.job_id
    AND eo12.offering_id                            = jobs.offering_id
    AND (acc_p12.accounttype_id                    IN (1,17)
    OR acc_p122.accounttype_id                     IN (1,17))
    AND j12.settle_status_id                       IN (474,476)
    AND eo12.billingsource_id                       = 122
  ),0) AS ERPayrollSubmitted, NVL(
  (SELECT SUM(cr.amount)
  FROM cycowner.b_journal j12
  JOIN cycowner.b_contributionjournal cj ON cj.journal_id    = j12.id
  JOIN cycowner.b_contributionrecord cr  ON cr.id            = cj.contribution_id
  JOIN cycowner.b_posting p12            ON p12.journal_id   = j12.id
  JOIN cycowner.b_posting p122           ON p122.journal_id  = j12.id AND p12.id<>p122.id
  JOIN cycowner.b_account acc_p12        ON acc_p12.id       = p12.account_id
  JOIN cycowner.b_account acc_p122       ON acc_p122.id      = p122.account_id
  JOIN cycowner.b_policyjournal pj12     ON pj12.journal_id  = j12.id
  JOIN cycowner.p_policy policy12        ON policy12.id      = pj12.policy_id
  JOIN cycowner.b_paysiteinvoice psi12   ON psi12.invoice_id = p122.invoice_id
  JOIN cycowner.m_employeroffering eo12  ON eo12.id          = policy12.employeroffering_id
  WHERE p122.invoice_id                             = jobs.invoice_id
    AND policy12.job_id                             = jobs.job_id
    AND eo12.offering_id                            = jobs.offering_id
    AND (acc_p12.accounttype_id                    IN (1,17)
    OR acc_p122.accounttype_id                     IN (1,17))
    AND j12.settle_status_id                       IN (474,476)
    AND eo12.billingsource_id                       = 121
  ),0) AS EEPayrollSubmitted, NVL(
  (SELECT SUM(cr.amount)
  FROM cycowner.b_journal j12
  JOIN cycowner.b_contributionjournal cj ON cj.journal_id    = j12.id
  JOIN cycowner.b_contributionrecord cr  ON cr.id            = cj.contribution_id
  JOIN cycowner.b_posting p12            ON p12.journal_id   = j12.id
  JOIN cycowner.b_posting p122           ON p122.journal_id  = j12.id AND p12.id<>p122.id
  JOIN cycowner.b_account acc_p12        ON acc_p12.id       = p12.account_id
  JOIN cycowner.b_account acc_p122       ON acc_p122.id      = p122.account_id
  JOIN cycowner.b_policyjournal pj12     ON pj12.journal_id  = j12.id
  JOIN cycowner.p_policy policy12        ON policy12.id      = pj12.policy_id
  JOIN cycowner.b_paysiteinvoice psi12   ON psi12.invoice_id = p122.invoice_id
  JOIN cycowner.m_employeroffering eo12  ON eo12.id          = policy12.employeroffering_id
  WHERE p122.invoice_id                             = jobs.invoice_id
    AND policy12.job_id                             = jobs.job_id
    AND eo12.offering_id                            = jobs.offering_id
    AND (acc_p12.accounttype_id                    IN (1,17)
    OR acc_p122.accounttype_id                     IN (1,17))
    AND j12.settle_status_id                       IN (474,476)
  ),0) AS TotalPayrollSubmitted, ( (NVL(
  (SELECT SUM(p12.amount)
  FROM cycowner.b_journal j12
  JOIN cycowner.b_posting p12           ON p12.journal_id   = j12.id
  JOIN cycowner.b_posting p122          ON p122.journal_id  = j12.id AND p12.id<>p122.id
  JOIN cycowner.b_account acc_p12       ON acc_p12.id       = p12.account_id
  JOIN cycowner.b_account acc_p122      ON acc_p122.id      = p122.account_id
  JOIN cycowner.b_policyjournal pj12    ON pj12.journal_id  = j12.id
  JOIN cycowner.p_policy policy12       ON policy12.id      = pj12.policy_id
  JOIN cycowner.b_paysiteinvoice psi12  ON psi12.invoice_id = p122.invoice_id
  JOIN cycowner.m_employeroffering eo12 ON eo12.id          = policy12.employeroffering_id
  WHERE p122.invoice_id                            = jobs.invoice_id
    AND policy12.job_id                            = jobs.job_id
    AND eo12.offering_id                           = jobs.offering_id
    AND (acc_p12.accounttype_id                   IN (1,17)
    OR acc_p122.accounttype_id                    IN (1,17))
    AND j12.settle_status_id                      IN (474,476)
  ),0))                                            + (NVL(
  (SELECT SUM(p2.amount)
  FROM cycowner.b_posting p2
  JOIN cycowner.b_journal j2           ON j2.id                  = p2.journal_id
  JOIN cycowner.b_savingsaccount sa2   ON sa2.account_id         = p2.account_id
  JOIN cycowner.b_invoice inv2         ON inv2.id                = j2.invoice_id
  JOIN cycowner.b_advancejournal aj2   ON aj2.advance_journal_id = j2.id
  JOIN cycowner.b_journal parentj2     ON parentj2.id            = aj2.policy_journal_id
  JOIN cycowner.b_policyjournal pj2    ON pj2.journal_id         = parentj2.id
  JOIN cycowner.p_policy policy2       ON policy2.id             = pj2.policy_id
  JOIN cycowner.m_employeroffering eo2 ON eo2.id                 = policy2.employeroffering_id
  WHERE inv2.id                                         = jobs.invoice_id
    AND eo2.offering_id                                 = jobs.offering_id
    AND policy2.job_id                                  = jobs.job_id
    AND j2.activity_id                                  = 612
    AND (j2.hidden                                     IS NULL
    OR j2.hidden                                       <> 1)
    AND p2.amount                                      <> 0
    AND j2.settle_status_id                            IN(474,476)
  ), 0)) ) AS TotalPayrollProcessed,
  CASE
    WHEN jobs.offering_id IN (5)
    THEN ( NVL(
      (SELECT SUM(p12.amount)
      FROM cycowner.b_journal j12
      JOIN cycowner.b_posting p12           ON p12.journal_id   = j12.id
      JOIN cycowner.b_posting p122          ON p122.journal_id  = j12.id AND p12.id<>p122.id
      JOIN cycowner.b_account acc_p12       ON acc_p12.id       = p12.account_id
      JOIN cycowner.b_account acc_p122      ON acc_p122.id      = p122.account_id
      JOIN cycowner.b_policyjournal pj12    ON pj12.journal_id  = j12.id
      JOIN cycowner.p_policy policy12       ON policy12.id      = pj12.policy_id
      JOIN cycowner.b_paysiteinvoice psi12  ON psi12.invoice_id = p122.invoice_id
      JOIN cycowner.m_employeroffering eo12 ON eo12.id          = policy12.employeroffering_id
      WHERE p122.invoice_id                            = jobs.invoice_id
        AND policy12.job_id                            = jobs.job_id
        AND eo12.offering_id                           = jobs.offering_id
        AND (acc_p12.accounttype_id                   IN (1,17)
        OR acc_p122.accounttype_id                    IN (1,17))
        AND j12.settle_status_id                      IN (474,476)
      ),0) )
    ELSE 0
  END AppliedToHsaBalance,
  CASE
    WHEN jobs.offering_id IN (5)
    THEN NVL(
      (SELECT SUM(p2.amount)
      FROM cycowner.b_posting p2
      JOIN cycowner.b_journal j2           ON j2.id                  = p2.journal_id
      JOIN cycowner.b_savingsaccount sa2   ON sa2.account_id         = p2.account_id
      JOIN cycowner.b_invoice inv2         ON inv2.id                = j2.invoice_id
      JOIN cycowner.b_advancejournal aj2   ON aj2.advance_journal_id = j2.id
      JOIN cycowner.b_journal parentj2     ON parentj2.id            = aj2.policy_journal_id
      JOIN cycowner.b_policyjournal pj2    ON pj2.journal_id         = parentj2.id
      JOIN cycowner.p_policy policy2       ON policy2.id             = pj2.policy_id
      JOIN cycowner.m_employeroffering eo2 ON eo2.id                 = policy2.employeroffering_id
      WHERE inv2.id                                         = jobs.invoice_id
        AND eo2.offering_id                                 = jobs.offering_id
        AND policy2.job_id                                  = jobs.job_id
        AND j2.activity_id                                  = 612
        AND (j2.hidden                                     IS NULL
        OR j2.hidden                                       <> 1)
        AND p2.amount                                      <> 0
        AND j2.settle_status_id                            IN( 476,474)
      ), 0)
    ELSE 0
  END AppliedToHsaOdPayBack, ( (NVL(
  (SELECT SUM(p12.amount)
  FROM cycowner.b_journal j12
  JOIN cycowner.b_posting p12           ON p12.journal_id   = j12.id
  JOIN cycowner.b_posting p122          ON p122.journal_id  = j12.id AND p12.id<>p122.id
  JOIN cycowner.b_account acc_p12       ON acc_p12.id       = p12.account_id
  JOIN cycowner.b_account acc_p122      ON acc_p122.id      = p122.account_id
  JOIN cycowner.b_policyjournal pj12    ON pj12.journal_id  = j12.id
  JOIN cycowner.p_policy policy12       ON policy12.id      = pj12.policy_id
  JOIN cycowner.b_paysiteinvoice psi12  ON psi12.invoice_id = p122.invoice_id
  JOIN cycowner.m_employeroffering eo12 ON eo12.id          = policy12.employeroffering_id
  WHERE p122.invoice_id                            = jobs.invoice_id
    AND policy12.job_id                            = jobs.job_id
    AND eo12.offering_id                           = jobs.offering_id
    AND (acc_p12.accounttype_id                   IN (1,17)
    OR acc_p122.accounttype_id                    IN (1,17))
    AND j12.settle_status_id                      IN (474,476)
  ),0))                                            + (NVL(
  (SELECT SUM(p2.amount)
  FROM cycowner.b_posting p2
  JOIN cycowner.b_journal j2           ON j2.id                  = p2.journal_id
  JOIN cycowner.b_savingsaccount sa2   ON sa2.account_id         = p2.account_id
  JOIN cycowner.b_invoice inv2         ON inv2.id                = j2.invoice_id
  JOIN cycowner.b_advancejournal aj2   ON aj2.advance_journal_id = j2.id
  JOIN cycowner.b_journal parentj2     ON parentj2.id            = aj2.policy_journal_id
  JOIN cycowner.b_policyjournal pj2    ON pj2.journal_id         = parentj2.id
  JOIN cycowner.p_policy policy2       ON policy2.id             = pj2.policy_id
  JOIN cycowner.m_employeroffering eo2 ON eo2.id                 = policy2.employeroffering_id
  WHERE inv2.id                                         = jobs.invoice_id
    AND eo2.offering_id                                 = jobs.offering_id
    AND policy2.job_id                                  = jobs.job_id
    AND j2.activity_id                                  = 612
    AND (j2.hidden                                     IS NULL
    OR j2.hidden                                       <> 1)
    AND p2.amount                                      <> 0
    AND j2.settle_status_id                            IN(474,476)
  ), 0)) )                                              - (NVL(
  (SELECT SUM(cr.amount)
  FROM cycowner.b_journal j12
  JOIN cycowner.b_contributionjournal cj ON cj.journal_id    = j12.id
  JOIN cycowner.b_contributionrecord cr  ON cr.id            = cj.contribution_id
  JOIN cycowner.b_posting p12            ON p12.journal_id   = j12.id
  JOIN cycowner.b_posting p122           ON p122.journal_id  = j12.id AND p12.id<>p122.id
  JOIN cycowner.b_account acc_p12        ON acc_p12.id       = p12.account_id
  JOIN cycowner.b_account acc_p122       ON acc_p122.id      = p122.account_id
  JOIN cycowner.b_policyjournal pj12     ON pj12.journal_id  = j12.id
  JOIN cycowner.p_policy policy12        ON policy12.id      = pj12.policy_id
  JOIN cycowner.b_paysiteinvoice psi12   ON psi12.invoice_id = p122.invoice_id
  JOIN cycowner.m_employeroffering eo12  ON eo12.id          = policy12.employeroffering_id
  WHERE p122.invoice_id                             = jobs.invoice_id
    AND policy12.job_id                             = jobs.job_id
    AND eo12.offering_id                            = jobs.offering_id
    AND (acc_p12.accounttype_id                    IN (1,17)
    OR acc_p122.accounttype_id                     IN (1,17))
    AND j12.settle_status_id                       IN (474,476)
  ),0)) AS DespositsNotApplied, TO_CHAR(psi.deduction_date,'MM/dd/yyyy') AS ContributionDate, invType.name AS InvoiceType
FROM jobs
JOIN cycowner.m_job jb               ON jb.id          = jobs.job_id
JOIN cycowner.m_person person        ON person.id      = jb.employee_id
JOIN cycowner.m_employer er          ON er.id          = jb.employer_id
JOIN cycowner.m_jobstatus js         ON js.job_id      = jb.id
JOIN cycowner.m_jobstatustype jst    ON jst.id         = js.status
JOIN cycowner.b_paysiteinvoice psi   ON psi.invoice_id = jobs.invoice_id
JOIN cycowner.b_invoice inv          ON inv.id         = psi.invoice_id
JOIN cycowner.m_paysite ps           ON ps.id          = psi.paysite_id
JOIN cycowner.m_simplelookup invType ON invType.id     = inv.invoice_type
WHERE js.vt_begin                            <= (SELECT TRUNC(system_date) system_date FROM cycowner.m_system_status)
  AND js.vt_end > (SELECT TRUNC(system_date) system_date FROM cycowner.m_system_status)
  AND js.tt_start <= CURRENT_TIMESTAMP
  AND js.tt_stop   > CURRENT_TIMESTAMP
  AND NVL(
  (SELECT SUM(p12.amount)
  FROM cycowner.b_journal j12
  JOIN cycowner.b_posting p12           ON p12.journal_id   = j12.id
  JOIN cycowner.b_posting p122          ON p122.journal_id  = j12.id AND p12.id<>p122.id
  JOIN cycowner.b_account acc_p12       ON acc_p12.id       = p12.account_id
  JOIN cycowner.b_account acc_p122      ON acc_p122.id      = p122.account_id
  JOIN cycowner.b_policyjournal pj12    ON pj12.journal_id  = j12.id
  JOIN cycowner.p_policy policy12       ON policy12.id      = pj12.policy_id
  JOIN cycowner.b_paysiteinvoice psi12  ON psi12.invoice_id = p122.invoice_id
  JOIN cycowner.m_employeroffering eo12 ON eo12.id          = policy12.employeroffering_id
  WHERE p122.invoice_id                            = jobs.invoice_id
    AND policy12.job_id                            = jobs.job_id
    AND eo12.offering_id                           = jobs.offering_id
    AND (acc_p12.accounttype_id                   IN (1,17)
    OR acc_p122.accounttype_id                    IN (1,17))
    AND j12.settle_status_id                      IN (474,476)
  ),0)                                             > 0


Explain Plan 1 (2a of 8)

Anthony Munoz, September 19, 2016 - 6:21 pm UTC

operation object_name object_alias rows bytes cost time part_start part_stop object_node other_tag predicates
SELECT STATEMENT 1 262 3 K 00:44
TABLE ACCESS [by index rowid] M_OFFERING M_OFFERING@SEL$125 1 6 1 00:01
INDEX [unique scan] M_OFFERING_PKEY M_OFFERING@SEL$125 1 0 00:01 "ID"=:B1
SORT [aggregate] 1 67
NESTED LOOPS
NESTED LOOPS 1 67 9 00:01
NESTED LOOPS 1 35 6 00:01
TABLE ACCESS [by index rowid] M_EMPLOYEROFFERING EO@SEL$1 1 18 2 00:01 "EO"."BILLINGSOURCE_ID"=122
INDEX [range scan] EEP_EO_PLANYEAR_ER EO@SEL$1 1 1 00:01 "EO"."OFFERING_ID"=:B1 AND "EO"."EMPLOYERPLANYEAR_ID"=:B2
TABLE ACCESS [by index rowid] P_POLICY PP@SEL$1 1 17 4 00:01 "EO"."ID"="PP"."EMPLOYEROFFERING_ID"
INDEX [range scan] IX_POLICY_JOB PP@SEL$1 2 2 00:01 "PP"."JOB_ID"=:B1
INDEX [range scan] IX_PREMIUM_FULL PREMIUMS@SEL$3 1 2 00:01 "PREMIUMS"."POLICY_ID"="PP"."ID"
TABLE ACCESS [by index rowid] P_PREMIUM PREMIUMS@SEL$3 1 32 3 00:01
SORT [aggregate] 1 67
NESTED LOOPS
NESTED LOOPS 1 67 9 00:01
NESTED LOOPS 1 35 6 00:01
TABLE ACCESS [by index rowid] M_EMPLOYEROFFERING EO@SEL$4 1 18 2 00:01 "EO"."BILLINGSOURCE_ID"=121
INDEX [range scan] EEP_EO_PLANYEAR_ER EO@SEL$4 1 1 00:01 "EO"."OFFERING_ID"=:B1 AND "EO"."EMPLOYERPLANYEAR_ID"=:B2
TABLE ACCESS [by index rowid] P_POLICY PP@SEL$4 1 17 4 00:01 "EO"."ID"="PP"."EMPLOYEROFFERING_ID"
INDEX [range scan] IX_POLICY_JOB PP@SEL$4 2 2 00:01 "PP"."JOB_ID"=:B1
INDEX [range scan] IX_PREMIUM_FULL PREMIUMS@SEL$6 1 2 00:01 "PREMIUMS"."POLICY_ID"="PP"."ID"
TABLE ACCESS [by index rowid] P_PREMIUM PREMIUMS@SEL$6 1 32 3 00:01
SORT [aggregate] 1 63
NESTED LOOPS
NESTED LOOPS 1 63 9 00:01
NESTED LOOPS 1 31 6 00:01
TABLE ACCESS [by index rowid] M_EMPLOYEROFFERING EO@SEL$7 1 14 2 00:01
INDEX [range scan] EEP_EO_PLANYEAR_ER EO@SEL$7 1 1 00:01 "EO"."OFFERING_ID"=:B1 AND "EO"."EMPLOYERPLANYEAR_ID"=:B2
TABLE ACCESS [by index rowid] P_POLICY PP@SEL$7 1 17 4 00:01 "EO"."ID"="PP"."EMPLOYEROFFERING_ID"
INDEX [range scan] IX_POLICY_JOB PP@SEL$7 2 2 00:01 "PP"."JOB_ID"=:B1
INDEX [range scan] IX_PREMIUM_FULL PREMIUMS@SEL$9 1 2 00:01 "PREMIUMS"."POLICY_ID"="PP"."ID"
TABLE ACCESS [by index rowid] P_PREMIUM PREMIUMS@SEL$9 1 32 3 00:01
SORT [aggregate] 1 134
NESTED LOOPS
NESTED LOOPS 1 134 20 00:01
NESTED LOOPS 1 126 18 00:01
NESTED LOOPS 1 118 16 00:01
NESTED LOOPS 1 101 13 00:01
NESTED LOOPS 1 88 12 00:01
NESTED LOOPS 1 71 10 00:01
NESTED LOOPS 1 59 8 00:01
NESTED LOOPS 1 49 7 00:01
NESTED LOOPS 1 37 6 00:01
NESTED LOOPS 1 27 4 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI12@SEL$18 1 6 1 00:01 "PSI12"."INVOICE_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$13 1 21 3 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$13 1 2 00:01 "PSI12"."INVOICE_ID"="P122"."INVOICE_ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$10 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$10 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
INDEX [range scan] B_CONTRIBUTIONJOURNAL_PKEY CJ@SEL$10 1 12 1 00:01 "CJ"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_CONTRIBUTIONRECORD CR@SEL$11 1 10 1 00:01
INDEX [unique scan] B_CONTRIBUTIONRECORD_PKEY CR@SEL$11 1 1 00:01 "CR"."ID"="CJ"."CONTRIBUTION_ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$16 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$17 1 17 2 00:01 "POLICY12"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$17 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$19 1 13 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"=:B1 AND "EO12"."BILLINGSOURCE_ID"=122
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$12 2 34 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$12 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$15 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$15 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$14 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$14 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
SORT [aggregate] 1 134
NESTED LOOPS
NESTED LOOPS 1 134 20 00:01
NESTED LOOPS 1 126 18 00:01
NESTED LOOPS 1 118 16 00:01
NESTED LOOPS 1 101 13 00:01
NESTED LOOPS 1 88 12 00:01
NESTED LOOPS 1 71 10 00:01
NESTED LOOPS 1 59 8 00:01
NESTED LOOPS 1 49 7 00:01
NESTED LOOPS 1 37 6 00:01
NESTED LOOPS 1 27 4 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI12@SEL$28 1 6 1 00:01 "PSI12"."INVOICE_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$23 1 21 3 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$23 1 2 00:01 "PSI12"."INVOICE_ID"="P122"."INVOICE_ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$20 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$20 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
INDEX [range scan] B_CONTRIBUTIONJOURNAL_PKEY CJ@SEL$20 1 12 1 00:01 "CJ"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_CONTRIBUTIONRECORD CR@SEL$21 1 10 1 00:01
INDEX [unique scan] B_CONTRIBUTIONRECORD_PKEY CR@SEL$21 1 1 00:01 "CR"."ID"="CJ"."CONTRIBUTION_ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$26 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$27 1 17 2 00:01 "POLICY12"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$27 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$29 1 13 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"=:B1 AND "EO12"."BILLINGSOURCE_ID"=121
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$22 2 34 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$22 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$25 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$25 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$24 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$24 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
SORT [aggregate] 1 130
NESTED LOOPS
NESTED LOOPS 1 130 20 00:01
NESTED LOOPS 1 122 18 00:01
NESTED LOOPS 1 114 16 00:01
NESTED LOOPS 1 97 13 00:01
NESTED LOOPS 1 88 12 00:01
NESTED LOOPS 1 71 10 00:01
NESTED LOOPS 1 59 8 00:01
NESTED LOOPS 1 49 7 00:01
NESTED LOOPS 1 37 6 00:01
NESTED LOOPS 1 27 4 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI12@SEL$38 1 6 1 00:01 "PSI12"."INVOICE_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$33 1 21 3 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$33 1 2 00:01 "PSI12"."INVOICE_ID"="P122"."INVOICE_ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$30 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$30 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
INDEX [range scan] B_CONTRIBUTIONJOURNAL_PKEY CJ@SEL$30 1 12 1 00:01 "CJ"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_CONTRIBUTIONRECORD CR@SEL$31 1 10 1 00:01
INDEX [unique scan] B_CONTRIBUTIONRECORD_PKEY CR@SEL$31 1 1 00:01 "CR"."ID"="CJ"."CONTRIBUTION_ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$36 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$37 1 17 2 00:01 "POLICY12"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$37 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$39 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$32 2 34 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$32 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$35 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$35 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$34 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$34 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17

Explain Plan 1 (2b of 8)

Anthony Munoz, September 19, 2016 - 6:23 pm UTC

SORT [aggregate] 1 112
NESTED LOOPS
NESTED LOOPS 1 112 18 00:01
NESTED LOOPS 1 104 16 00:01
NESTED LOOPS 1 96 14 00:01
NESTED LOOPS 1 75 11 00:01
NESTED LOOPS 1 66 10 00:01
NESTED LOOPS 1 49 8 00:01
NESTED LOOPS 1 37 6 00:01
NESTED LOOPS 1 27 4 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI12@SEL$46 1 6 1 00:01 "PSI12"."INVOICE_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$41 1 21 3 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$41 1 2 00:01 "PSI12"."INVOICE_ID"="P122"."INVOICE_ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$40 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$40 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$44 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$45 1 17 2 00:01 "POLICY12"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$45 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$47 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$40 2 42 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$40 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$43 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$43 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$42 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$42 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
SORT [aggregate] 1 91
NESTED LOOPS 1 91 15 00:01
NESTED LOOPS 1 86 14 00:01
NESTED LOOPS 1 71 11 00:01
NESTED LOOPS 1 62 10 00:01
NESTED LOOPS 1 45 8 00:01
NESTED LOOPS 1 33 6 00:01
TABLE ACCESS [by index rowid] B_JOURNAL J2@SEL$48 1 21 5 00:01 "J2"."ACTIVITY_ID"=612 AND ("J2"."SETTLE_STATUS_ID"=474 OR "J2"."SETTLE_STATUS_ID"=476) AND ("J2"."HIDDEN" IS NULL OR "J2"."HIDDEN"<>1)
INDEX [range scan] IDX_JOURNAL_INVOICE_ID J2@SEL$48 14 3 00:01 "J2"."INVOICE_ID"=:B1
INDEX [range scan] B_ADVANCEJOURNAL_PKEY AJ2@SEL$51 1 12 1 00:01 "AJ2"."ADVANCE_JOURNAL_ID"="J2"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ2@SEL$53 1 12 2 00:01 "AJ2"."POLICY_JOURNAL_ID"="PJ2"."JOURNAL_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY2@SEL$54 1 17 2 00:01 "POLICY2"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY2@SEL$54 1 1 00:01 "POLICY2"."ID"="PJ2"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO2@SEL$55 1 9 1 00:01 "EO2"."ID"="POLICY2"."EMPLOYEROFFERING_ID" AND "EO2"."OFFERING_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P2@SEL$48 2 30 3 00:01 "P2"."AMOUNT"<>0
INDEX [range scan] IDX_POSTING_JOURNAL P2@SEL$48 2 2 00:01 "J2"."ID"="P2"."JOURNAL_ID"
INDEX [unique scan] B_SAVINGSACCOUNT_PKEY SA2@SEL$49 1 5 1 00:01 "SA2"."ACCOUNT_ID"="P2"."ACCOUNT_ID"
SORT [aggregate] 1 112
NESTED LOOPS
NESTED LOOPS 1 112 18 00:01
NESTED LOOPS 1 104 16 00:01
NESTED LOOPS 1 96 14 00:01
NESTED LOOPS 1 75 11 00:01
NESTED LOOPS 1 66 10 00:01
NESTED LOOPS 1 49 8 00:01
NESTED LOOPS 1 37 6 00:01
NESTED LOOPS 1 27 4 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI12@SEL$62 1 6 1 00:01 "PSI12"."INVOICE_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$57 1 21 3 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$57 1 2 00:01 "PSI12"."INVOICE_ID"="P122"."INVOICE_ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$56 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$56 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$60 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$61 1 17 2 00:01 "POLICY12"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$61 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$63 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$56 2 42 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$56 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$59 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$59 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$58 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$58 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
SORT [aggregate] 1 91
NESTED LOOPS 1 91 15 00:01
NESTED LOOPS 1 86 14 00:01
NESTED LOOPS 1 71 11 00:01
NESTED LOOPS 1 62 10 00:01
NESTED LOOPS 1 45 8 00:01
NESTED LOOPS 1 33 6 00:01
TABLE ACCESS [by index rowid] B_JOURNAL J2@SEL$64 1 21 5 00:01 "J2"."ACTIVITY_ID"=612 AND ("J2"."SETTLE_STATUS_ID"=474 OR "J2"."SETTLE_STATUS_ID"=476) AND ("J2"."HIDDEN" IS NULL OR "J2"."HIDDEN"<>1)
INDEX [range scan] IDX_JOURNAL_INVOICE_ID J2@SEL$64 14 3 00:01 "J2"."INVOICE_ID"=:B1
INDEX [range scan] B_ADVANCEJOURNAL_PKEY AJ2@SEL$67 1 12 1 00:01 "AJ2"."ADVANCE_JOURNAL_ID"="J2"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ2@SEL$69 1 12 2 00:01 "AJ2"."POLICY_JOURNAL_ID"="PJ2"."JOURNAL_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY2@SEL$70 1 17 2 00:01 "POLICY2"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY2@SEL$70 1 1 00:01 "POLICY2"."ID"="PJ2"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO2@SEL$71 1 9 1 00:01 "EO2"."ID"="POLICY2"."EMPLOYEROFFERING_ID" AND "EO2"."OFFERING_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P2@SEL$64 2 30 3 00:01 "P2"."AMOUNT"<>0
INDEX [range scan] IDX_POSTING_JOURNAL P2@SEL$64 2 2 00:01 "J2"."ID"="P2"."JOURNAL_ID"
INDEX [unique scan] B_SAVINGSACCOUNT_PKEY SA2@SEL$65 1 5 1 00:01 "SA2"."ACCOUNT_ID"="P2"."ACCOUNT_ID"

Explain Plan 1 (2c of 8)

Anthony Munoz, September 19, 2016 - 6:24 pm UTC

SORT [aggregate] 1 112
NESTED LOOPS
NESTED LOOPS 1 112 18 00:01
NESTED LOOPS 1 104 16 00:01
NESTED LOOPS 1 96 14 00:01
NESTED LOOPS 1 75 11 00:01
NESTED LOOPS 1 66 10 00:01
NESTED LOOPS 1 49 8 00:01
NESTED LOOPS 1 37 6 00:01
NESTED LOOPS 1 27 4 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI12@SEL$78 1 6 1 00:01 "PSI12"."INVOICE_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$73 1 21 3 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$73 1 2 00:01 "PSI12"."INVOICE_ID"="P122"."INVOICE_ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$72 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$72 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$76 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$77 1 17 2 00:01 "POLICY12"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$77 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$79 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$72 2 42 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$72 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$75 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$75 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$74 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$74 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
SORT [aggregate] 1 91
NESTED LOOPS 1 91 15 00:01
NESTED LOOPS 1 86 14 00:01
NESTED LOOPS 1 71 11 00:01
NESTED LOOPS 1 62 10 00:01
NESTED LOOPS 1 45 8 00:01
NESTED LOOPS 1 33 6 00:01
TABLE ACCESS [by index rowid] B_JOURNAL J2@SEL$80 1 21 5 00:01 "J2"."ACTIVITY_ID"=612 AND ("J2"."SETTLE_STATUS_ID"=474 OR "J2"."SETTLE_STATUS_ID"=476) AND ("J2"."HIDDEN" IS NULL OR "J2"."HIDDEN"<>1)
INDEX [range scan] IDX_JOURNAL_INVOICE_ID J2@SEL$80 14 3 00:01 "J2"."INVOICE_ID"=:B1
INDEX [range scan] B_ADVANCEJOURNAL_PKEY AJ2@SEL$83 1 12 1 00:01 "AJ2"."ADVANCE_JOURNAL_ID"="J2"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ2@SEL$85 1 12 2 00:01 "AJ2"."POLICY_JOURNAL_ID"="PJ2"."JOURNAL_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY2@SEL$86 1 17 2 00:01 "POLICY2"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY2@SEL$86 1 1 00:01 "POLICY2"."ID"="PJ2"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO2@SEL$87 1 9 1 00:01 "EO2"."ID"="POLICY2"."EMPLOYEROFFERING_ID" AND "EO2"."OFFERING_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P2@SEL$80 2 30 3 00:01 "P2"."AMOUNT"<>0
INDEX [range scan] IDX_POSTING_JOURNAL P2@SEL$80 2 2 00:01 "J2"."ID"="P2"."JOURNAL_ID"
INDEX [unique scan] B_SAVINGSACCOUNT_PKEY SA2@SEL$81 1 5 1 00:01 "SA2"."ACCOUNT_ID"="P2"."ACCOUNT_ID"
SORT [aggregate] 1 130
NESTED LOOPS
NESTED LOOPS 1 130 20 00:01
NESTED LOOPS 1 122 18 00:01
NESTED LOOPS 1 114 16 00:01
NESTED LOOPS 1 97 13 00:01
NESTED LOOPS 1 88 12 00:01
NESTED LOOPS 1 71 10 00:01
NESTED LOOPS 1 59 8 00:01
NESTED LOOPS 1 49 7 00:01
NESTED LOOPS 1 37 6 00:01
NESTED LOOPS 1 27 4 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI12@SEL$96 1 6 1 00:01 "PSI12"."INVOICE_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$91 1 21 3 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$91 1 2 00:01 "PSI12"."INVOICE_ID"="P122"."INVOICE_ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$88 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$88 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
INDEX [range scan] B_CONTRIBUTIONJOURNAL_PKEY CJ@SEL$88 1 12 1 00:01 "CJ"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_CONTRIBUTIONRECORD CR@SEL$89 1 10 1 00:01
INDEX [unique scan] B_CONTRIBUTIONRECORD_PKEY CR@SEL$89 1 1 00:01 "CR"."ID"="CJ"."CONTRIBUTION_ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$94 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$95 1 17 2 00:01 "POLICY12"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$95 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$97 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$90 2 34 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$90 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$93 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$93 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$92 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$92 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
FILTER NVL( (SELECT SUM("P12"."AMOUNT") FROM "CYCOWNER"."M_EMPLOYEROFFERING" "EO12","CYCOWNER"."B_PAYSITEINVOICE" "PSI12","CYCOWNER"."P_POLICY" "POLICY12","CYCOWNER"."B_POLICYJOURNAL" "PJ12","CYCOWNER"."B_ACCOUNT" "ACC_P122","CYCOWNER"."B_ACCOUNT" "ACC_P12","CYCOWNER"."B_POSTING" "P122","CYCOWNER"."B_POSTING" "P12","CYCOWNER"."B_JOURNAL" "J12" WHERE "P122"."JOURNAL_ID"="J12"."ID" AND ("J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476) AND "P12"."JOURNAL_ID"="J12"."ID" AND "P12"."ID"<>"P122"."ID" AND "PSI12"."INVOICE_ID"="P122"."INVOICE_ID" AND "P122"."INVOICE_ID"=:B1 AND "ACC_P12"."ID"="P12"."ACCOUNT_ID" AND (("ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17) OR ("ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17)) AND "ACC_P122"."ID"="P122"."ACCOUNT_ID" AND "PJ12"."JOURNAL_ID"="J12"."ID" AND "POLICY12"."ID"="PJ12"."POLICY_ID" AND "POLICY12"."JOB_ID"=:B2 AND "PSI12"."INVOICE_ID"=:B3 AND "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"=:B4),0)>0
NESTED LOOPS
NESTED LOOPS 1 262 3 K 00:43
NESTED LOOPS 1 239 3 K 00:43
NESTED LOOPS 1 229 3 K 00:43
NESTED LOOPS 1 190 3 K 00:43
NESTED LOOPS 1 175 3 K 00:43
NESTED LOOPS 1 156 3 K 00:43
HASH JOIN 1 134 3 K 00:43 "JB"."ID"="JOBS"."JOB_ID"
JOIN FILTER [create] :BF0000
NESTED LOOPS
NESTED LOOPS 9 945 3 K 00:42
MERGE JOIN 8 472 3 K 00:42
TABLE ACCESS [by index rowid] M_JOBSTATUSTYPE JST@SEL$110 5 60 2 00:01
INDEX [full scan] M_JOBSTATUSTYPE_PKEY JST@SEL$110 5 1 00:01
SORT [join] 10 470 3 K 00:42 "JST"."ID"="JS"."STATUS"
TABLE ACCESS [full] M_JOBSTATUS JS@SEL$109 10 470 3 K 00:42 SYS_EXTRACT_UTC(INTERNAL_FUNCTION("JS"."TT_START"))<=SYS_EXTRACT_UTC(CURRENT_TIMESTAMP(6)) AND SYS_EXTRACT_UTC(INTERNAL_FUNCTION("JS"."TT_STOP"))>SYS_EXTRACT_UTC(CURRENT_TIMESTAMP(6)) AND "JS"."VT_BEGIN"<= (SELECT TRUNC(INTERNAL_FUNCTION("SYSTEM_DATE")) FROM "CYCOWNER"."M_SYSTEM_STATUS" "M_SYSTEM_STATUS") AND "JS"."VT_END"> (SELECT TRUNC(INTERNAL_FUNCTION("SYSTEM_DATE")) FROM "CYCOWNER"."M_SYSTEM_STATUS" "M_SYSTEM_STATUS")
TABLE ACCESS [full] M_SYSTEM_STATUS M_SYSTEM_STATUS@SEL$139 1 8 3 00:01
TABLE ACCESS [full] M_SYSTEM_STATUS M_SYSTEM_STATUS@SEL$140 1 8 3 00:01
INDEX [unique scan] M_JOB_PKEY JB@SEL$106 1 1 00:01 "JS"."JOB_ID"="JB"."ID"
TABLE ACCESS [by index rowid] M_JOB JB@SEL$106 1 46 2 00:01
VIEW JOBS@SEL$106 22 638 95 00:02
HASH [unique] 22 1 K 95 00:02
JOIN FILTER [use] :BF0000
NESTED LOOPS
NESTED LOOPS 22 1 K 94 00:02
NESTED LOOPS 11 715 61 00:01
NESTED LOOPS 11 561 50 00:01
NESTED LOOPS 11 374 28 00:01
NESTED LOOPS 11 242 6 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI@SEL$121 1 6 1 00:01 "PSI"."INVOICE_ID"=2181230
TABLE ACCESS [by index rowid] B_POSTING P2@SEL$116 11 176 5 00:01
INDEX [range scan] IDX_POSTING_INVOICE P2@SEL$116 11 2 00:01 "P2"."INVOICE_ID"=2181230
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ@SEL$119 1 12 2 00:01 "P2"."JOURNAL_ID"="PJ"."JOURNAL_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY@SEL$120 1 17 2 00:01
INDEX [unique scan] P_POLICY_PKEY POLICY@SEL$120 1 1 00:01 "POLICY"."ID"="PJ"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO@SEL$122 1 14 1 00:01 "EO"."ID"="POLICY"."EMPLOYEROFFERING_ID"
INDEX [range scan] IDX_POSTING_JOURNAL P1@SEL$115 2 2 00:01 "P1"."JOURNAL_ID"="PJ"."JOURNAL_ID"
TABLE ACCESS [by index rowid] B_POSTING P1@SEL$115 2 24 3 00:01 "P1"."ID"<>"P2"."ID"
TABLE ACCESS [by index rowid] M_EMPLOYER ER@SEL$108 1 22 1 00:01
INDEX [unique scan] M_EMPLOYER_PKEY ER@SEL$108 1 0 00:01 "ER"."ID"="JB"."EMPLOYER_ID"
TABLE ACCESS [by index rowid] B_PAYSITEINVOICE PSI@SEL$111 1 19 1 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI@SEL$111 1 0 00:01 "PSI"."INVOICE_ID"="JOBS"."INVOICE_ID"
TABLE ACCESS [by index rowid] M_PAYSITE PS@SEL$113 1 15 1 00:01
INDEX [unique scan] M_PAYSITE_PKEY PS@SEL$113 1 0 00:01 "PS"."ID"="PSI"."PAYSITE_ID"
TABLE ACCESS [by index rowid] M_PERSON PERSON@SEL$107 1 39 2 00:01
INDEX [unique scan] M_PERSON_PKEY PERSON@SEL$107 1 1 00:01 "PERSON"."ID"="JB"."EMPLOYEE_ID"
TABLE ACCESS [by index rowid] B_INVOICE INV@SEL$112 1 10 2 00:01 "INV"."INVOICE_TYPE" IS NOT NULL
INDEX [unique scan] B_INVOICE_PKEY INV@SEL$112 1 1 00:01 "INV"."ID"="PSI"."INVOICE_ID"
INDEX [unique scan] M_SIMPLELOOKUP_PKEY INVTYPE@SEL$114 1 0 00:01 "INVTYPE"."ID"="INV"."INVOICE_TYPE"
TABLE ACCESS [by index rowid] M_SIMPLELOOKUP INVTYPE@SEL$114 1 23 1 00:01
SORT [aggregate] 1 112
NESTED LOOPS
NESTED LOOPS 1 112 18 00:01
NESTED LOOPS 1 104 16 00:01
NESTED LOOPS 1 96 14 00:01
NESTED LOOPS 1 75 11 00:01
NESTED LOOPS 1 66 10 00:01
NESTED LOOPS 1 49 8 00:01
NESTED LOOPS 1 37 6 00:01
NESTED LOOPS 1 27 4 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI12@SEL$104 1 6 1 00:01 "PSI12"."INVOICE_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$99 1 21 3 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$99 1 2 00:01 "PSI12"."INVOICE_ID"="P122"."INVOICE_ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$98 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$98 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$102 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$103 1 17 2 00:01 "POLICY12"."JOB_ID"=:B1
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$103 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$105 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"=:B1
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$98 2 42 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$98 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$101 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$101 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$100 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$100 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17

Query 2 Not Mateialized (3 of 8)

Anthony Munoz, September 19, 2016 - 6:26 pm UTC

Rewrote as non-correlated subqueries we could join to.

QUERY (Total execution time 8.671 sec.):

with
    jobs as
    (
        select distinct policy.job_id, eo.offering_id, psi.invoice_id, eo.employerplanyear_id, o.alternate_id
        from cycowner.b_journal j
            join cycowner.b_posting p1           on p1.journal_id = j.id
            join cycowner.b_posting p2           on p2.journal_id = j.id
                                                 and p1.id<>p2.id
            join cycowner.b_account acc_p1       on acc_p1.id = p1.account_id
            join cycowner.b_account acc_p2       on acc_p2.id = p2.account_id
            join cycowner.b_policyjournal pj     on pj.journal_id = j.id
            join cycowner.p_policy policy        on policy.id = pj.policy_id
            join cycowner.b_paysiteinvoice psi   on psi.invoice_id = p2.invoice_id
            join cycowner.m_employeroffering eo  on eo.id = policy.employeroffering_id
            join cycowner.m_offering o           on o.id = eo.offering_id
        where p2.invoice_id = 2181230
    ),
    prem_er as
    (
        select pp.job_id, eo.offering_id, eo.employerplanyear_id, sum(premiums.premium) as sum_prem
        from cycowner.p_policy pp
            join cycowner.m_employeroffering eo  on eo.id = pp.employeroffering_id
            join cycowner.p_premium premiums     on premiums.policy_id = pp.id
        where 1=1
            and eo.billingsource_id  = 122
            and premiums.tt_start <= current_timestamp
            and premiums.tt_stop   > current_timestamp
        group by pp.job_id, eo.offering_id, eo.employerplanyear_id--, eo.billingsource_id
    ),
    prem_ee as
    (
        select pp.job_id, eo.offering_id, eo.employerplanyear_id, sum(premiums.premium) as sum_prem
        from cycowner.p_policy pp
            join cycowner.m_employeroffering eo  on eo.id = pp.employeroffering_id
            join cycowner.p_premium premiums     on premiums.policy_id = pp.id
        where 1=1
            and eo.billingsource_id  = 121
            and premiums.tt_start <= current_timestamp
            and premiums.tt_stop   > current_timestamp
        group by pp.job_id, eo.offering_id, eo.employerplanyear_id--, eo.billingsource_id
    ),
    payroll_sub_er as
    (
        select policy12.job_id, eo12.offering_id, sum(cr.amount) as sum_amount
        from cycowner.b_journal j12
            join cycowner.b_contributionjournal cj on cj.journal_id = j12.id
            join cycowner.b_contributionrecord cr  on cr.id = cj.contribution_id
            join cycowner.b_posting p12            on p12.journal_id = j12.id
            join cycowner.b_posting p122           on p122.journal_id = j12.id
                                          and p12.id<>p122.id
            join cycowner.b_account acc_p12        on acc_p12.id = p12.account_id
            join cycowner.b_account acc_p122       on acc_p122.id = p122.account_id
            join cycowner.b_policyjournal pj12     on pj12.journal_id = j12.id
            join cycowner.p_policy policy12        on policy12.id = pj12.policy_id
            join cycowner.m_employeroffering eo12  on eo12.id = policy12.employeroffering_id
        where p122.invoice_id = 2181230
            and
            (
                acc_p12.accounttype_id in (1,17)
                or acc_p122.accounttype_id in (1,17)
            )
            and j12.settle_status_id in (474,476)
            and eo12.billingsource_id = 122
        group by policy12.job_id, eo12.offering_id
    ),
    payroll_sub_ee as
    (
        select policy12.job_id, eo12.offering_id, sum(cr.amount) as sum_amount
        from cycowner.b_journal j12
            join cycowner.b_contributionjournal cj on cj.journal_id = j12.id
            join cycowner.b_contributionrecord cr  on cr.id = cj.contribution_id
            join cycowner.b_posting p12            on p12.journal_id = j12.id
            join cycowner.b_posting p122           on p122.journal_id = j12.id
                                          and p12.id<>p122.id
            join cycowner.b_account acc_p12        on acc_p12.id = p12.account_id
            join cycowner.b_account acc_p122       on acc_p122.id = p122.account_id
            join cycowner.b_policyjournal pj12     on pj12.journal_id = j12.id
            join cycowner.p_policy policy12        on policy12.id = pj12.policy_id
            join cycowner.m_employeroffering eo12  on eo12.id = policy12.employeroffering_id
        where p122.invoice_id = 2181230
            and
            (
                acc_p12.accounttype_id in (1,17)
                or acc_p122.accounttype_id in (1,17)
            )
            and j12.settle_status_id in (474,476)
            and eo12.billingsource_id = 121
        group by policy12.job_id, eo12.offering_id
    ),
    payroll_proc1 as
    (
        select policy12.job_id, eo12.offering_id, sum(p12.amount) as sum_amount
        from cycowner.b_journal j12
            join cycowner.b_posting p12           on p12.journal_id   = j12.id
            join cycowner.b_posting p122          on p122.journal_id  = j12.id
                                         and p12.id<>p122.id
            join cycowner.b_account acc_p12       on acc_p12.id       = p12.account_id
            join cycowner.b_account acc_p122      on acc_p122.id      = p122.account_id
            join cycowner.b_policyjournal pj12    on pj12.journal_id  = j12.id
            join cycowner.p_policy policy12       on policy12.id      = pj12.policy_id
            join cycowner.m_employeroffering eo12 on eo12.id          = policy12.employeroffering_id
        where p122.invoice_id = 2181230
            and
            (
                acc_p12.accounttype_id in (1,17)
                or acc_p122.accounttype_id in (1,17)
            )
            and j12.settle_status_id in (474,476)
        group by policy12.job_id, eo12.offering_id
    ),
    payroll_proc2 as
    (
        select policy2.job_id, eo2.offering_id, sum(p2.amount) as sum_amount
        from cycowner.b_posting p2
            join cycowner.b_journal j2           on j2.id                  = p2.journal_id
            join cycowner.b_savingsaccount sa2   on sa2.account_id         = p2.account_id
            join cycowner.b_invoice inv2         on inv2.id                = j2.invoice_id
            join cycowner.b_advancejournal aj2   on aj2.advance_journal_id = j2.id
            join cycowner.b_journal parentj2     on parentj2.id            = aj2.policy_journal_id
            join cycowner.b_policyjournal pj2    on pj2.journal_id         = parentj2.id
            join cycowner.p_policy policy2       on policy2.id             = pj2.policy_id
            join cycowner.m_employeroffering eo2 on eo2.id                 = policy2.employeroffering_id
        where inv2.id = 2181230
            and j2.activity_id = 612
            and
            (
                j2.hidden is null
                or j2.hidden <> 1
            )
            and p2.amount <> 0
            and j2.settle_status_id in(474,476)
        group by policy2.job_id, eo2.offering_id
    ),
    hsa_balance as
    (
        select policy12.job_id, eo12.offering_id, sum(p12.amount) as sum_amount
        from cycowner.b_journal j12
            join cycowner.b_posting p12           on p12.journal_id = j12.id
            join cycowner.b_posting p122          on p122.journal_id = j12.id and p12.id<>p122.id
            join cycowner.b_account acc_p12       on acc_p12.id = p12.account_id
            join cycowner.b_account acc_p122      on acc_p122.id = p122.account_id
            join cycowner.b_policyjournal pj12    on pj12.journal_id = j12.id
            join cycowner.p_policy policy12       on policy12.id = pj12.policy_id
            join cycowner.m_employeroffering eo12 on eo12.id = policy12.employeroffering_id
        where p122.invoice_id = 2181230
            and
            (
                acc_p12.accounttype_id in (1,17)
                or acc_p122.accounttype_id in (1,17)
            )
            and j12.settle_status_id in (474,476)
        group by policy12.job_id, eo12.offering_id
    ),
    hsa_od_payback as
    (
        select policy2.job_id, eo2.offering_id, sum(p2.amount) as sum_amount
        from cycowner.b_posting p2
            join cycowner.b_journal j2           on j2.id = p2.journal_id
            join cycowner.b_savingsaccount sa2   on sa2.account_id = p2.account_id
            join cycowner.b_invoice inv2         on inv2.id = j2.invoice_id
            join cycowner.b_advancejournal aj2   on aj2.advance_journal_id = j2.id
            join cycowner.b_journal parentj2     on parentj2.id = aj2.policy_journal_id
            join cycowner.b_policyjournal pj2    on pj2.journal_id = parentj2.id
            join cycowner.p_policy policy2       on policy2.id = pj2.policy_id
            join cycowner.m_employeroffering eo2 on eo2.id = policy2.employeroffering_id
        where inv2.id = 2181230
            and j2.activity_id = 612
            and
            (
                j2.hidden is null
                or j2.hidden <> 1
            )
            and p2.amount <> 0
            and j2.settle_status_id in( 476,474)
        group by policy2.job_id, eo2.offering_id
    )
select er.name as EmployerName,
    jobs.invoice_id as InvoiceNumber,
    person.first_name firstname,
    person.last_name lastname,
    person.ssn,
    ('xxx-xx-' || person.last_four_ssn) as last_four_ssn,
    jb.external_employee_id as EmployerEmployeeId,
    jb.partner_employee_id as PartnerEmployeeId,
    jb.division as Division1,
    jb.division2 as Division2,
    jb.division3 as Division3,
    jb.division4 as Division4,
    ps.name as PaysiteName,
    jobs.alternate_id as AccountType,
    case
        when jb.coverage_level = 'F'
        then 'Family'
        when  jb.coverage_level = 'S'
        then 'Single'
        else ''
    end as CoverageLevel,
    jst.name AS Status,
    to_char(js.vt_begin,'MM/dd/yyyy') AS EmployeeEffectiveDate,
    case
        when js.status = 2
        then to_char(js.vt_begin,'MM/dd/yyyy')
        else ''
    end as TermDate,
    nvl(prem_er.sum_prem, 0) as EmployerAnnualElection,
    nvl(prem_ee.sum_prem, 0) as EmployeeAnnualElection,
    nvl(prem_er.sum_prem, 0) + nvl(prem_ee.sum_prem, 0) as TotalAnnualElection,
    nvl(payroll_sub_er.sum_amount, 0) as ERPayrollSubmitted,
    nvl(payroll_sub_ee.sum_amount, 0) as EEPayrollSubmitted,
    nvl(payroll_sub_er.sum_amount, 0) + nvl(payroll_sub_ee.sum_amount, 0) as TotalPayrollSubmitted,
    nvl(pproc1.sum_amount, 0) + nvl(pproc2.sum_amount, 0) as TotalPayrollProcessed,
    case when jobs.offering_id in (5) then nvl(hb.sum_amount, 0) else 0 end as AppliedToHsaBalance,
    case when jobs.offering_id in (5) then nvl(hop.sum_amount, 0) else 0 end as AppliedToHsaOdPayBack,
    nvl(hb.sum_amount, 0) + nvl(hop.sum_amount, 0) - (nvl(pproc1.sum_amount, 0) + nvl(pproc2.sum_amount, 0)) as DespositsNotApplied,
    to_char(psi.deduction_date,'mm/dd/yyyy') as ContributionDate,
    invType.name AS InvoiceType
from
    jobs
    join
        (
        select policy12.job_id, eo12.offering_id, sum(p12.amount)
        from cycowner.b_journal j12
            join cycowner.b_posting p12           on p12.journal_id = j12.id
            join cycowner.b_posting p122          on p122.journal_id = j12.id
                                                  and p12.id<>p122.id
            join cycowner.b_account acc_p12       on acc_p12.id = p12.account_id
            join cycowner.b_account acc_p122      on acc_p122.id = p122.account_id
            join cycowner.b_policyjournal pj12    on pj12.journal_id = j12.id
            join cycowner.p_policy policy12       on policy12.id = pj12.policy_id
            join cycowner.m_employeroffering eo12 on eo12.id = policy12.employeroffering_id
        where p122.invoice_id = 2181230
            and
                (
                acc_p12.accounttype_id in (1, 17)
                or acc_p122.accounttype_id in (1, 17)
                )
            and j12.settle_status_id in (474, 476)
        group by policy12.job_id, eo12.offering_id
        having sum(p12.amount) > 0
        ) jsum2                          on jsum2.job_id = jobs.job_id
                                         and jsum2.offering_id = jobs.offering_id
    left join prem_er                    on prem_er.job_id = jobs.job_id
                                         and prem_er.offering_id = jobs.offering_id
                                         and prem_er.employerplanyear_id = jobs.employerplanyear_id
    left join prem_ee                    on prem_ee.job_id = jobs.job_id
                                         and prem_ee.offering_id = jobs.offering_id
                                         and prem_ee.employerplanyear_id = jobs.employerplanyear_id
    left join payroll_sub_er             on payroll_sub_er.job_id = jobs.job_id
                                         and payroll_sub_er.offering_id = jobs.offering_id
    left join payroll_sub_ee             on payroll_sub_ee.job_id = jobs.job_id
                                         and payroll_sub_ee.offering_id = jobs.offering_id
    left join payroll_proc1 pproc1       on pproc1.job_id = jobs.job_id
                                         and pproc1.offering_id = jobs.offering_id
    left join payroll_proc2 pproc2       on pproc2.job_id = jobs.job_id
                                         and pproc2.offering_id = jobs.offering_id
    left join hsa_balance hb             on hb.job_id = jobs.job_id
                                         and hb.offering_id = jobs.offering_id
    left join hsa_od_payback hop         on hop.job_id = jobs.job_id
                                         and hop.offering_id = jobs.offering_id
    join cycowner.m_job jb               on jb.id = jobs.job_id
    join cycowner.m_person person        on person.id = jb.employee_id
    join cycowner.m_employer er          on er.id = jb.employer_id
    join cycowner.m_jobstatus js         on js.job_id = jb.id
    join cycowner.m_jobstatustype jst    on jst.id = js.status
    join cycowner.b_paysiteinvoice psi   on psi.invoice_id = jobs.invoice_id
    join cycowner.b_invoice inv          on inv.id = psi.invoice_id
    join cycowner.m_paysite ps           on ps.id = psi.paysite_id
    join cycowner.m_simplelookup invtype on invtype.id = inv.invoice_type
where
    (select trunc(system_date) system_date from cycowner.m_system_status) between js.vt_begin and js.vt_end - 1
    and js.tt_start <= current_timestamp
    and js.tt_stop > current_timestamp

-- added ssn and account type to the order by
order by lastname, firstname, ssn, accounttype
;

Explain Plan 2 (4a of 8)

Anthony Munoz, September 19, 2016 - 6:27 pm UTC

operation object_name object_alias rows bytes cost time part_start part_stop object_node other_tag predicates
SELECT STATEMENT 1 533 518 00:07
SORT [order by] 1 533 518 00:07
NESTED LOOPS
NESTED LOOPS 1 533 511 00:07
NESTED LOOPS 1 510 510 00:07
NESTED LOOPS 1 500 508 00:07
NESTED LOOPS 1 461 506 00:07
NESTED LOOPS 1 439 505 00:07
NESTED LOOPS 1 427 504 00:07
NESTED LOOPS 1 380 501 00:07
NESTED LOOPS 1 334 499 00:06
NESTED LOOPS 1 319 498 00:06
NESTED LOOPS [outer] 1 300 497 00:06
NESTED LOOPS [outer] 1 283 482 00:06
NESTED LOOPS [outer] 1 266 418 00:06
NESTED LOOPS [outer] 1 249 403 00:05
NESTED LOOPS [outer] 1 232 340 00:05
NESTED LOOPS [outer] 1 215 295 00:04
NESTED LOOPS [outer] 1 198 251 00:04
NESTED LOOPS [outer] 1 179 242 00:03
HASH JOIN 1 160 233 00:03 "JSUM2"."JOB_ID"="JOBS"."JOB_ID" AND "JSUM2"."OFFERING_ID"="JOBS"."OFFERING_ID"
VIEW JSUM2@SEL$1 1 10 133 00:02
FILTER SUM("P12"."AMOUNT")>0
HASH [group by] 1 106 133 00:02
NESTED LOOPS 1 106 132 00:02
NESTED LOOPS 1 97 131 00:02
NESTED LOOPS 1 80 129 00:02
NESTED LOOPS 1 68 127 00:02
NESTED LOOPS 22 1 K 83 00:01
NESTED LOOPS 11 429 50 00:01
NESTED LOOPS 11 341 28 00:01
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$3 11 231 6 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$3 11 3 00:01 "P122"."INVOICE_ID"=2181230
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$2 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$2 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$5 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$5 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$2 2 42 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$2 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$4 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$4 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$6 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$7 1 17 2 00:01
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$7 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$8 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID"
VIEW JOBS@SEL$1 22 3 K 100 00:02
HASH [unique] 22 1 K 100 00:02
NESTED LOOPS
NESTED LOOPS 22 1 K 99 00:02
HASH JOIN 11 781 66 00:01 "O"."ID"="EO"."OFFERING_ID"
NESTED LOOPS 11 715 61 00:01
NESTED LOOPS 11 561 50 00:01
NESTED LOOPS 11 374 28 00:01
NESTED LOOPS 11 242 6 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI@SEL$93 1 6 1 00:01 "PSI"."INVOICE_ID"=2181230
TABLE ACCESS [by index rowid] B_POSTING P2@SEL$88 11 176 5 00:01
INDEX [range scan] IDX_POSTING_INVOICE P2@SEL$88 11 2 00:01 "P2"."INVOICE_ID"=2181230
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ@SEL$91 1 12 2 00:01 "P2"."JOURNAL_ID"="PJ"."JOURNAL_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY@SEL$92 1 17 2 00:01
INDEX [unique scan] P_POLICY_PKEY POLICY@SEL$92 1 1 00:01 "POLICY"."ID"="PJ"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO@SEL$94 1 14 1 00:01 "EO"."ID"="POLICY"."EMPLOYEROFFERING_ID"
TABLE ACCESS [full] M_OFFERING O@SEL$95 104 624 4 00:01
INDEX [range scan] IDX_POSTING_JOURNAL P1@SEL$87 2 2 00:01 "P1"."JOURNAL_ID"="PJ"."JOURNAL_ID"
TABLE ACCESS [by index rowid] B_POSTING P1@SEL$87 2 24 3 00:01 "P1"."ID"<>"P2"."ID"
VIEW PUSHED PREDICATE PREM_ER@SEL$10 1 19 9 00:01
SORT [group by] 1 67 9 00:01
NESTED LOOPS
NESTED LOOPS 1 67 9 00:01
NESTED LOOPS 1 35 6 00:01
TABLE ACCESS [by index rowid] M_EMPLOYEROFFERING EO@SEL$85 1 18 2 00:01 "EO"."BILLINGSOURCE_ID"=122
INDEX [range scan] EEP_EO_PLANYEAR_ER EO@SEL$85 1 1 00:01 "EO"."OFFERING_ID"="JOBS"."OFFERING_ID" AND "EO"."EMPLOYERPLANYEAR_ID"="JOBS"."EMPLOYERPLANYEAR_ID"
TABLE ACCESS [by index rowid] P_POLICY PP@SEL$85 1 17 4 00:01 "EO"."ID"="PP"."EMPLOYEROFFERING_ID"
INDEX [range scan] IX_POLICY_JOB PP@SEL$85 2 2 00:01 "PP"."JOB_ID"="JOBS"."JOB_ID"
INDEX [range scan] IX_PREMIUM_FULL PREMIUMS@SEL$86 1 2 00:01 "PREMIUMS"."POLICY_ID"="PP"."ID"
TABLE ACCESS [by index rowid] P_PREMIUM PREMIUMS@SEL$86 1 32 3 00:01
VIEW PUSHED PREDICATE PREM_EE@SEL$12 1 19 9 00:01
SORT [group by] 1 67 9 00:01
NESTED LOOPS
NESTED LOOPS 1 67 9 00:01
NESTED LOOPS 1 35 6 00:01
TABLE ACCESS [by index rowid] M_EMPLOYEROFFERING EO@SEL$83 1 18 2 00:01 "EO"."BILLINGSOURCE_ID"=121
INDEX [range scan] EEP_EO_PLANYEAR_ER EO@SEL$83 1 1 00:01 "EO"."OFFERING_ID"="JOBS"."OFFERING_ID" AND "EO"."EMPLOYERPLANYEAR_ID"="JOBS"."EMPLOYERPLANYEAR_ID"
TABLE ACCESS [by index rowid] P_POLICY PP@SEL$83 1 17 4 00:01 "EO"."ID"="PP"."EMPLOYEROFFERING_ID"
INDEX [range scan] IX_POLICY_JOB PP@SEL$83 2 2 00:01 "PP"."JOB_ID"="JOBS"."JOB_ID"
INDEX [range scan] IX_PREMIUM_FULL PREMIUMS@SEL$84 1 2 00:01 "PREMIUMS"."POLICY_ID"="PP"."ID"
TABLE ACCESS [by index rowid] P_PREMIUM PREMIUMS@SEL$84 1 32 3 00:01
VIEW PUSHED PREDICATE PAYROLL_SUB_ER@SEL$14 1 17 45 00:01
SORT [group by] 1 128 45 00:01
NESTED LOOPS
NESTED LOOPS 1 128 45 00:01
NESTED LOOPS 1 120 43 00:01
NESTED LOOPS 1 112 41 00:01
NESTED LOOPS 1 95 38 00:01
NESTED LOOPS 1 82 37 00:01
NESTED LOOPS 1 65 35 00:01
NESTED LOOPS 1 53 33 00:01
HASH JOIN 1 43 32 00:01 "CJ"."JOURNAL_ID"="J12"."ID"
NESTED LOOPS
NESTED LOOPS 11 341 28 00:01
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$77 11 231 6 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$77 11 3 00:01 "P122"."INVOICE_ID"=2181230
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$74 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$74 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [fast full scan] B_CONTRIBUTIONJOURNAL_PKEY CJ@SEL$74 940 11 K 3 00:01
TABLE ACCESS [by index rowid] B_CONTRIBUTIONRECORD CR@SEL$75 1 10 1 00:01
INDEX [unique scan] B_CONTRIBUTIONRECORD_PKEY CR@SEL$75 1 1 00:01 "CR"."ID"="CJ"."CONTRIBUTION_ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$80 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$81 1 17 2 00:01 "POLICY12"."JOB_ID"="JOBS"."JOB_ID"
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$81 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$82 1 13 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"="JOBS"."OFFERING_ID" AND "EO12"."BILLINGSOURCE_ID"=122
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$76 2 34 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$76 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$78 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$78 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$79 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$79 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
VIEW PUSHED PREDICATE PAYROLL_SUB_EE@SEL$16 1 17 45 00:01
SORT [group by] 1 128 45 00:01
NESTED LOOPS
NESTED LOOPS 1 128 45 00:01
NESTED LOOPS 1 120 43 00:01
NESTED LOOPS 1 112 41 00:01
NESTED LOOPS 1 95 38 00:01
NESTED LOOPS 1 82 37 00:01
NESTED LOOPS 1 65 35 00:01
NESTED LOOPS 1 53 33 00:01
HASH JOIN 1 43 32 00:01 "CJ"."JOURNAL_ID"="J12"."ID"
NESTED LOOPS
NESTED LOOPS 11 341 28 00:01
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$68 11 231 6 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$68 11 3 00:01 "P122"."INVOICE_ID"=2181230
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$65 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$65 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [fast full scan] B_CONTRIBUTIONJOURNAL_PKEY CJ@SEL$65 940 11 K 3 00:01
TABLE ACCESS [by index rowid] B_CONTRIBUTIONRECORD CR@SEL$66 1 10 1 00:01
INDEX [unique scan] B_CONTRIBUTIONRECORD_PKEY CR@SEL$66 1 1 00:01 "CR"."ID"="CJ"."CONTRIBUTION_ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$71 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$72 1 17 2 00:01 "POLICY12"."JOB_ID"="JOBS"."JOB_ID"
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$72 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$73 1 13 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"="JOBS"."OFFERING_ID" AND "EO12"."BILLINGSOURCE_ID"=121
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$67 2 34 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$67 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$69 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$69 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$70 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$70 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17

Explain Plan 2 (4b of 8)

Anthony Munoz, September 19, 2016 - 6:28 pm UTC

VIEW PUSHED PREDICATE PPROC1@SEL$18 1 17 64 00:01
SORT [group by] 1 106 64 00:01
NESTED LOOPS
NESTED LOOPS 1 106 64 00:01
NESTED LOOPS 1 98 62 00:01
NESTED LOOPS 1 90 60 00:01
NESTED LOOPS 1 69 57 00:01
HASH JOIN 1 60 56 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
NESTED LOOPS 11 473 50 00:01
NESTED LOOPS 11 341 28 00:01
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$59 11 231 6 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$59 11 3 00:01 "P122"."INVOICE_ID"=2181230
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$58 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$58 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$62 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$63 2 34 5 00:01
INDEX [range scan] IX_POLICY_JOB POLICY12@SEL$63 2 3 00:01 "POLICY12"."JOB_ID"="JOBS"."JOB_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$64 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"="JOBS"."OFFERING_ID"
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$58 2 42 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$58 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$61 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$61 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$60 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$60 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
VIEW PUSHED PREDICATE PPROC2@SEL$20 1 17 15 00:01
SORT [group by] 1 91 15 00:01
NESTED LOOPS 1 91 15 00:01
NESTED LOOPS 1 86 14 00:01
NESTED LOOPS 1 71 11 00:01
NESTED LOOPS 1 62 10 00:01
NESTED LOOPS 1 45 8 00:01
NESTED LOOPS 1 33 6 00:01
TABLE ACCESS [by index rowid] B_JOURNAL J2@SEL$50 1 21 5 00:01 "J2"."ACTIVITY_ID"=612 AND ("J2"."SETTLE_STATUS_ID"=474 OR "J2"."SETTLE_STATUS_ID"=476) AND ("J2"."HIDDEN" IS NULL OR "J2"."HIDDEN"<>1)
INDEX [range scan] IDX_JOURNAL_INVOICE_ID J2@SEL$50 13 3 00:01 "J2"."INVOICE_ID"=2181230
INDEX [range scan] B_ADVANCEJOURNAL_PKEY AJ2@SEL$53 1 12 1 00:01 "AJ2"."ADVANCE_JOURNAL_ID"="J2"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ2@SEL$55 1 12 2 00:01 "AJ2"."POLICY_JOURNAL_ID"="PJ2"."JOURNAL_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY2@SEL$56 1 17 2 00:01 "POLICY2"."JOB_ID"="JOBS"."JOB_ID"
INDEX [unique scan] P_POLICY_PKEY POLICY2@SEL$56 1 1 00:01 "POLICY2"."ID"="PJ2"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO2@SEL$57 1 9 1 00:01 "EO2"."ID"="POLICY2"."EMPLOYEROFFERING_ID" AND "EO2"."OFFERING_ID"="JOBS"."OFFERING_ID"
TABLE ACCESS [by index rowid] B_POSTING P2@SEL$50 2 30 3 00:01 "P2"."AMOUNT"<>0
INDEX [range scan] IDX_POSTING_JOURNAL P2@SEL$50 2 2 00:01 "J2"."ID"="P2"."JOURNAL_ID"
INDEX [unique scan] B_SAVINGSACCOUNT_PKEY SA2@SEL$51 1 5 1 00:01 "SA2"."ACCOUNT_ID"="P2"."ACCOUNT_ID"
VIEW PUSHED PREDICATE HB@SEL$22 1 17 64 00:01
SORT [group by] 1 106 64 00:01
NESTED LOOPS
NESTED LOOPS 1 106 64 00:01
NESTED LOOPS 1 98 62 00:01
NESTED LOOPS 1 90 60 00:01
NESTED LOOPS 1 69 57 00:01
HASH JOIN 1 60 56 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
NESTED LOOPS 11 473 50 00:01
NESTED LOOPS 11 341 28 00:01
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$44 11 231 6 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$44 11 3 00:01 "P122"."INVOICE_ID"=2181230
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$43 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$43 1 1 00:01 "P122"."JOURNAL_ID"="J12"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$47 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$48 2 34 5 00:01
INDEX [range scan] IX_POLICY_JOB POLICY12@SEL$48 2 3 00:01 "POLICY12"."JOB_ID"="JOBS"."JOB_ID"
INDEX [range scan] PP_OPTOUT_ EO12@SEL$49 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."OFFERING_ID"="JOBS"."OFFERING_ID"
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$43 2 42 3 00:01 "P12"."ID"<>"P122"."ID"
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$43 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$46 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$46 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$45 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$45 1 8 2 00:01 "ACC_P12"."ACCOUNTTYPE_ID"=1 OR "ACC_P12"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
VIEW PUSHED PREDICATE HOP@SEL$24 1 17 15 00:01
SORT [group by] 1 91 15 00:01
NESTED LOOPS 1 91 15 00:01
NESTED LOOPS 1 86 14 00:01
NESTED LOOPS 1 71 11 00:01
NESTED LOOPS 1 62 10 00:01
NESTED LOOPS 1 45 8 00:01
NESTED LOOPS 1 33 6 00:01
TABLE ACCESS [by index rowid] B_JOURNAL J2@SEL$35 1 21 5 00:01 "J2"."ACTIVITY_ID"=612 AND ("J2"."SETTLE_STATUS_ID"=474 OR "J2"."SETTLE_STATUS_ID"=476) AND ("J2"."HIDDEN" IS NULL OR "J2"."HIDDEN"<>1)
INDEX [range scan] IDX_JOURNAL_INVOICE_ID J2@SEL$35 13 3 00:01 "J2"."INVOICE_ID"=2181230
INDEX [range scan] B_ADVANCEJOURNAL_PKEY AJ2@SEL$38 1 12 1 00:01 "AJ2"."ADVANCE_JOURNAL_ID"="J2"."ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ2@SEL$40 1 12 2 00:01 "AJ2"."POLICY_JOURNAL_ID"="PJ2"."JOURNAL_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY2@SEL$41 1 17 2 00:01 "POLICY2"."JOB_ID"="JOBS"."JOB_ID"
INDEX [unique scan] P_POLICY_PKEY POLICY2@SEL$41 1 1 00:01 "POLICY2"."ID"="PJ2"."POLICY_ID"
INDEX [range scan] PP_OPTOUT_ EO2@SEL$42 1 9 1 00:01 "EO2"."ID"="POLICY2"."EMPLOYEROFFERING_ID" AND "EO2"."OFFERING_ID"="JOBS"."OFFERING_ID"
TABLE ACCESS [by index rowid] B_POSTING P2@SEL$35 2 30 3 00:01 "P2"."AMOUNT"<>0
INDEX [range scan] IDX_POSTING_JOURNAL P2@SEL$35 2 2 00:01 "J2"."ID"="P2"."JOURNAL_ID"
INDEX [unique scan] B_SAVINGSACCOUNT_PKEY SA2@SEL$36 1 5 1 00:01 "SA2"."ACCOUNT_ID"="P2"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_PAYSITEINVOICE PSI@SEL$31 1 19 1 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI@SEL$31 1 0 00:01 "PSI"."INVOICE_ID"="JOBS"."INVOICE_ID"
TABLE ACCESS [by index rowid] M_PAYSITE PS@SEL$33 1 15 1 00:01
INDEX [unique scan] M_PAYSITE_PKEY PS@SEL$33 1 0 00:01 "PS"."ID"="PSI"."PAYSITE_ID"
TABLE ACCESS [by index rowid] M_JOB JB@SEL$26 1 46 2 00:01
INDEX [unique scan] M_JOB_PKEY JB@SEL$26 1 1 00:01 "JB"."ID"="JOBS"."JOB_ID"
TABLE ACCESS [by index rowid] M_JOBSTATUS JS@SEL$29 1 47 3 00:01
INDEX [range scan] IX_JSTATUS_FULL JS@SEL$29 1 2 00:01 "JS"."JOB_ID"="JB"."ID" AND "JS"."VT_BEGIN"<= (SELECT TRUNC(INTERNAL_FUNCTION("SYSTEM_DATE")) FROM "CYCOWNER"."M_SYSTEM_STATUS" "M_SYSTEM_STATUS")
TABLE ACCESS [full] M_SYSTEM_STATUS M_SYSTEM_STATUS@SEL$106 1 8 3 00:01
TABLE ACCESS [by index rowid] M_JOBSTATUSTYPE JST@SEL$30 1 12 1 00:01
INDEX [unique scan] M_JOBSTATUSTYPE_PKEY JST@SEL$30 1 0 00:01 "JST"."ID"="JS"."STATUS"
TABLE ACCESS [by index rowid] M_EMPLOYER ER@SEL$28 1 22 1 00:01
INDEX [unique scan] M_EMPLOYER_PKEY ER@SEL$28 1 0 00:01 "ER"."ID"="JB"."EMPLOYER_ID"
TABLE ACCESS [by index rowid] M_PERSON PERSON@SEL$27 1 39 2 00:01
INDEX [unique scan] M_PERSON_PKEY PERSON@SEL$27 1 1 00:01 "PERSON"."ID"="JB"."EMPLOYEE_ID"
TABLE ACCESS [by index rowid] B_INVOICE INV@SEL$32 1 10 2 00:01 "INV"."INVOICE_TYPE" IS NOT NULL
INDEX [unique scan] B_INVOICE_PKEY INV@SEL$32 1 1 00:01 "INV"."ID"="PSI"."INVOICE_ID"
INDEX [unique scan] M_SIMPLELOOKUP_PKEY INVTYPE@SEL$34 1 0 00:01 "INVTYPE"."ID"="INV"."INVOICE_TYPE"
TABLE ACCESS [by index rowid] M_SIMPLELOOKUP INVTYPE@SEL$34 1 23 1 00:01

Query 3 Materialized (5 of 8)

Anthony Munoz, September 19, 2016 - 6:29 pm UTC

I was weary of trying to materialize prem_er and prem_ee since they aren't filtered by invoice id (they rely on the join to filter). These numbers are materializing everything BUT those two. When I materialized them as well executiong time went up to 2m 40s.

QUERY (Total execution time 01:49.283 (109.283 sec.)):

with
    jobs as
    (
        select /*+ materialize */ distinct policy.job_id, eo.offering_id, psi.invoice_id, eo.employerplanyear_id, o.alternate_id
        from cycowner.b_journal j
            join cycowner.b_posting p1           on p1.journal_id = j.id
            join cycowner.b_posting p2           on p2.journal_id = j.id
                                                 and p1.id<>p2.id
            join cycowner.b_account acc_p1       on acc_p1.id = p1.account_id
            join cycowner.b_account acc_p2       on acc_p2.id = p2.account_id
            join cycowner.b_policyjournal pj     on pj.journal_id = j.id
            join cycowner.p_policy policy        on policy.id = pj.policy_id
            join cycowner.b_paysiteinvoice psi   on psi.invoice_id = p2.invoice_id
            join cycowner.m_employeroffering eo  on eo.id = policy.employeroffering_id
            join cycowner.m_offering o           on o.id = eo.offering_id
        where p2.invoice_id = 2181230
    ),
    jsum2 as
    (
        select /*+ materialize */ policy12.job_id, eo12.offering_id, sum(p12.amount)
        from cycowner.b_journal j12
            join cycowner.b_posting p12           on p12.journal_id = j12.id
            join cycowner.b_posting p122          on p122.journal_id = j12.id
                                                  and p12.id<>p122.id
            join cycowner.b_account acc_p12       on acc_p12.id = p12.account_id
            join cycowner.b_account acc_p122      on acc_p122.id = p122.account_id
            join cycowner.b_policyjournal pj12    on pj12.journal_id = j12.id
            join cycowner.p_policy policy12       on policy12.id = pj12.policy_id
            join cycowner.m_employeroffering eo12 on eo12.id = policy12.employeroffering_id
        where p122.invoice_id = 2181230
            and
                (
                acc_p12.accounttype_id in (1, 17)
                or acc_p122.accounttype_id in (1, 17)
                )
            and j12.settle_status_id in (474, 476)
        group by policy12.job_id, eo12.offering_id
        having sum(p12.amount) > 0
    ),
    prem_er as
    (
        select pp.job_id, eo.offering_id, eo.employerplanyear_id, sum(premiums.premium) as sum_prem
        from cycowner.p_policy pp
            join cycowner.m_employeroffering eo  on eo.id = pp.employeroffering_id
            join cycowner.p_premium premiums     on premiums.policy_id = pp.id
        where 1=1
            and eo.billingsource_id  = 122
            and premiums.tt_start <= current_timestamp
            and premiums.tt_stop   > current_timestamp
        group by pp.job_id, eo.offering_id, eo.employerplanyear_id--, eo.billingsource_id
    ),
    prem_ee as
    (
        select pp.job_id, eo.offering_id, eo.employerplanyear_id, sum(premiums.premium) as sum_prem
        from cycowner.p_policy pp
            join cycowner.m_employeroffering eo  on eo.id = pp.employeroffering_id
            join cycowner.p_premium premiums     on premiums.policy_id = pp.id
        where 1=1
            and eo.billingsource_id  = 121
            and premiums.tt_start <= current_timestamp
            and premiums.tt_stop   > current_timestamp
        group by pp.job_id, eo.offering_id, eo.employerplanyear_id--, eo.billingsource_id
    ),
    payroll_sub_er as
    (
        select /*+ materialize */ policy12.job_id, eo12.offering_id, sum(cr.amount) as sum_amount
        from cycowner.b_journal j12
            join cycowner.b_contributionjournal cj on cj.journal_id = j12.id
            join cycowner.b_contributionrecord cr  on cr.id = cj.contribution_id
            join cycowner.b_posting p12            on p12.journal_id = j12.id
            join cycowner.b_posting p122           on p122.journal_id = j12.id
                                          and p12.id<>p122.id
            join cycowner.b_account acc_p12        on acc_p12.id = p12.account_id
            join cycowner.b_account acc_p122       on acc_p122.id = p122.account_id
            join cycowner.b_policyjournal pj12     on pj12.journal_id = j12.id
            join cycowner.p_policy policy12        on policy12.id = pj12.policy_id
            join cycowner.m_employeroffering eo12  on eo12.id = policy12.employeroffering_id
        where p122.invoice_id = 2181230
            and
            (
                acc_p12.accounttype_id in (1,17)
                or acc_p122.accounttype_id in (1,17)
            )
            and j12.settle_status_id in (474,476)
            and eo12.billingsource_id = 122
        group by policy12.job_id, eo12.offering_id
    ),
    payroll_sub_ee as
    (
        select /*+ materialize */ policy12.job_id, eo12.offering_id, sum(cr.amount) as sum_amount
        from cycowner.b_journal j12
            join cycowner.b_contributionjournal cj on cj.journal_id = j12.id
            join cycowner.b_contributionrecord cr  on cr.id = cj.contribution_id
            join cycowner.b_posting p12            on p12.journal_id = j12.id
            join cycowner.b_posting p122           on p122.journal_id = j12.id
                                          and p12.id<>p122.id
            join cycowner.b_account acc_p12        on acc_p12.id = p12.account_id
            join cycowner.b_account acc_p122       on acc_p122.id = p122.account_id
            join cycowner.b_policyjournal pj12     on pj12.journal_id = j12.id
            join cycowner.p_policy policy12        on policy12.id = pj12.policy_id
            join cycowner.m_employeroffering eo12  on eo12.id = policy12.employeroffering_id
        where p122.invoice_id = 2181230
            and
            (
                acc_p12.accounttype_id in (1,17)
                or acc_p122.accounttype_id in (1,17)
            )
            and j12.settle_status_id in (474,476)
            and eo12.billingsource_id = 121
        group by policy12.job_id, eo12.offering_id
    ),
    payroll_proc1 as
    (
        select /*+ materialize */ policy12.job_id, eo12.offering_id, sum(p12.amount) as sum_amount
        from cycowner.b_journal j12
            join cycowner.b_posting p12           on p12.journal_id   = j12.id
            join cycowner.b_posting p122          on p122.journal_id  = j12.id
                                         and p12.id<>p122.id
            join cycowner.b_account acc_p12       on acc_p12.id       = p12.account_id
            join cycowner.b_account acc_p122      on acc_p122.id      = p122.account_id
            join cycowner.b_policyjournal pj12    on pj12.journal_id  = j12.id
            join cycowner.p_policy policy12       on policy12.id      = pj12.policy_id
            join cycowner.m_employeroffering eo12 on eo12.id          = policy12.employeroffering_id
        where p122.invoice_id = 2181230
            and
            (
                acc_p12.accounttype_id in (1,17)
                or acc_p122.accounttype_id in (1,17)
            )
            and j12.settle_status_id in (474,476)
        group by policy12.job_id, eo12.offering_id
    ),
    payroll_proc2 as
    (
        select /*+ materialize */ policy2.job_id, eo2.offering_id, sum(p2.amount) as sum_amount
        from cycowner.b_posting p2
            join cycowner.b_journal j2           on j2.id                  = p2.journal_id
            join cycowner.b_savingsaccount sa2   on sa2.account_id         = p2.account_id
            join cycowner.b_invoice inv2         on inv2.id                = j2.invoice_id
            join cycowner.b_advancejournal aj2   on aj2.advance_journal_id = j2.id
            join cycowner.b_journal parentj2     on parentj2.id            = aj2.policy_journal_id
            join cycowner.b_policyjournal pj2    on pj2.journal_id         = parentj2.id
            join cycowner.p_policy policy2       on policy2.id             = pj2.policy_id
            join cycowner.m_employeroffering eo2 on eo2.id                 = policy2.employeroffering_id
        where inv2.id = 2181230
            and j2.activity_id = 612
            and
            (
                j2.hidden is null
                or j2.hidden <> 1
            )
            and p2.amount <> 0
            and j2.settle_status_id in(474,476)
        group by policy2.job_id, eo2.offering_id
    ),
    hsa_balance as
    (
        select /*+ materialize */ policy12.job_id, eo12.offering_id, sum(p12.amount) as sum_amount
        from cycowner.b_journal j12
            join cycowner.b_posting p12           on p12.journal_id = j12.id
            join cycowner.b_posting p122          on p122.journal_id = j12.id and p12.id<>p122.id
            join cycowner.b_account acc_p12       on acc_p12.id = p12.account_id
            join cycowner.b_account acc_p122      on acc_p122.id = p122.account_id
            join cycowner.b_policyjournal pj12    on pj12.journal_id = j12.id
            join cycowner.p_policy policy12       on policy12.id = pj12.policy_id
            join cycowner.m_employeroffering eo12 on eo12.id = policy12.employeroffering_id
        where p122.invoice_id = 2181230
            and
            (
                acc_p12.accounttype_id in (1,17)
                or acc_p122.accounttype_id in (1,17)
            )
            and j12.settle_status_id in (474,476)
        group by policy12.job_id, eo12.offering_id
    ),
    hsa_od_payback as
    (
        select /*+ materialize */ policy2.job_id, eo2.offering_id, sum(p2.amount) as sum_amount
        from cycowner.b_posting p2
            join cycowner.b_journal j2           on j2.id = p2.journal_id
            join cycowner.b_savingsaccount sa2   on sa2.account_id = p2.account_id
            join cycowner.b_invoice inv2         on inv2.id = j2.invoice_id
            join cycowner.b_advancejournal aj2   on aj2.advance_journal_id = j2.id
            join cycowner.b_journal parentj2     on parentj2.id = aj2.policy_journal_id
            join cycowner.b_policyjournal pj2    on pj2.journal_id = parentj2.id
            join cycowner.p_policy policy2       on policy2.id = pj2.policy_id
            join cycowner.m_employeroffering eo2 on eo2.id = policy2.employeroffering_id
        where inv2.id = 2181230
            and j2.activity_id = 612
            and
            (
                j2.hidden is null
                or j2.hidden <> 1
            )
            and p2.amount <> 0
            and j2.settle_status_id in( 476,474)
        group by policy2.job_id, eo2.offering_id
    )
select er.name as EmployerName,
    jobs.invoice_id as InvoiceNumber,
    person.first_name firstname,
    person.last_name lastname,
    person.ssn,
    ('xxx-xx-' || person.last_four_ssn) as last_four_ssn,
    jb.external_employee_id as EmployerEmployeeId,
    jb.partner_employee_id as PartnerEmployeeId,
    jb.division as Division1,
    jb.division2 as Division2,
    jb.division3 as Division3,
    jb.division4 as Division4,
    ps.name as PaysiteName,
    jobs.alternate_id as AccountType,
    case
        when jb.coverage_level = 'F'
        then 'Family'
        when  jb.coverage_level = 'S'
        then 'Single'
        else ''
    end as CoverageLevel,
    jst.name AS Status,
    to_char(js.vt_begin,'MM/dd/yyyy') AS EmployeeEffectiveDate,
    case
        when js.status = 2
        then to_char(js.vt_begin,'MM/dd/yyyy')
        else ''
    end as TermDate,
    nvl(prem_er.sum_prem, 0) as EmployerAnnualElection,
    nvl(prem_ee.sum_prem, 0) as EmployeeAnnualElection,
    nvl(prem_er.sum_prem, 0) + nvl(prem_ee.sum_prem, 0) as TotalAnnualElection,
    nvl(payroll_sub_er.sum_amount, 0) as ERPayrollSubmitted,
    nvl(payroll_sub_ee.sum_amount, 0) as EEPayrollSubmitted,
    nvl(payroll_sub_er.sum_amount, 0) + nvl(payroll_sub_ee.sum_amount, 0) as TotalPayrollSubmitted,
    nvl(pproc1.sum_amount, 0) + nvl(pproc2.sum_amount, 0) as TotalPayrollProcessed,
    case when jobs.offering_id in (5) then nvl(hb.sum_amount, 0) else 0 end as AppliedToHsaBalance,
    case when jobs.offering_id in (5) then nvl(hop.sum_amount, 0) else 0 end as AppliedToHsaOdPayBack,
    nvl(hb.sum_amount, 0) + nvl(hop.sum_amount, 0) - (nvl(pproc1.sum_amount, 0) + nvl(pproc2.sum_amount, 0)) as DespositsNotApplied,
    to_char(psi.deduction_date,'mm/dd/yyyy') as ContributionDate,
    invType.name AS InvoiceType
from
    jobs
    join jsum2                           on jsum2.job_id = jobs.job_id
                                         and jsum2.offering_id = jobs.offering_id
    left join prem_er                    on prem_er.job_id = jobs.job_id
                                         and prem_er.offering_id = jobs.offering_id
                                         and prem_er.employerplanyear_id = jobs.employerplanyear_id
    left join prem_ee                    on prem_ee.job_id = jobs.job_id
                                         and prem_ee.offering_id = jobs.offering_id
                                         and prem_ee.employerplanyear_id = jobs.employerplanyear_id
    left join payroll_sub_er             on payroll_sub_er.job_id = jobs.job_id
                                         and payroll_sub_er.offering_id = jobs.offering_id
    left join payroll_sub_ee             on payroll_sub_ee.job_id = jobs.job_id
                                         and payroll_sub_ee.offering_id = jobs.offering_id
    left join payroll_proc1 pproc1       on pproc1.job_id = jobs.job_id
                                         and pproc1.offering_id = jobs.offering_id
    left join payroll_proc2 pproc2       on pproc2.job_id = jobs.job_id
                                         and pproc2.offering_id = jobs.offering_id
    left join hsa_balance hb             on hb.job_id = jobs.job_id
                                         and hb.offering_id = jobs.offering_id
    left join hsa_od_payback hop         on hop.job_id = jobs.job_id
                                         and hop.offering_id = jobs.offering_id
    join cycowner.m_job jb               on jb.id = jobs.job_id
    join cycowner.m_person person        on person.id = jb.employee_id
    join cycowner.m_employer er          on er.id = jb.employer_id
    join cycowner.m_jobstatus js         on js.job_id = jb.id
    join cycowner.m_jobstatustype jst    on jst.id = js.status
    join cycowner.b_paysiteinvoice psi   on psi.invoice_id = jobs.invoice_id
    join cycowner.b_invoice inv          on inv.id = psi.invoice_id
    join cycowner.m_paysite ps           on ps.id = psi.paysite_id
    join cycowner.m_simplelookup invtype on invtype.id = inv.invoice_type
where
    (select trunc(system_date) system_date from cycowner.m_system_status) between js.vt_begin and js.vt_end - 1
    and js.tt_start <= current_timestamp
    and js.tt_stop > current_timestamp

-- added ssn and account type to the order by
order by lastname, firstname, ssn, accounttype
;

Explain Plan 3 (6a of 8)

Anthony Munoz, September 19, 2016 - 6:30 pm UTC

operation object_name object_alias rows bytes cost time part_start part_stop object_node other_tag predicates
SELECT STATEMENT 1 587 468 K 01:35:54
TEMP TABLE TRANSFORMATION
LOAD AS SELECT SYS_TEMP_0FD9D7108_12EBD346
HASH [unique] 22 792 85 K 17:35
VIEW from$_subquery$_019@SEL$95 22 792 85 K 17:35
HASH JOIN 22 880 85 K 17:35 "O"."ID"="EO"."OFFERING_ID"
VIEW from$_subquery$_017@SEL$9 22 748 85 K 17:35
NESTED LOOPS 22 968 85 K 17:35
VIEW from$_subquery$_015@SEL$8 22 660 85 K 17:35
NESTED LOOPS 22 660 85 K 17:35
INDEX [unique scan] B_PSINVOICE_PKEY PSI@SEL$7 1 6 1 00:01 "PSI"."INVOICE_ID"=2181230
VIEW from$_subquery$_013@SEL$7 22 528 85 K 17:35
NESTED LOOPS
NESTED LOOPS 22 792 85 K 17:35
VIEW from$_subquery$_011@SEL$6 22 418 85 K 17:34
NESTED LOOPS 22 682 85 K 17:34
VIEW from$_subquery$_009@SEL$5 22 418 85 K 17:34
NESTED LOOPS 22 638 85 K 17:34
VIEW from$_subquery$_007@SEL$4 22 528 85 K 17:33
NESTED LOOPS 22 748 85 K 17:33
VIEW from$_subquery$_005@SEL$3 22 638 85 K 17:33
HASH JOIN 22 836 85 K 17:33 "P2"."JOURNAL_ID"="J"."ID"
TABLE ACCESS [by index rowid] B_POSTING P2@SEL$2 11 231 6 00:01
INDEX [range scan] IDX_POSTING_INVOICE P2@SEL$2 11 3 00:01 "P2"."INVOICE_ID"=2181230
VIEW from$_subquery$_003@SEL$2 22 M 388 M 85 K 17:32
HASH JOIN 22 M 526 M 85 K 17:32 "P1"."JOURNAL_ID"="J"."ID"
INDEX [fast full scan] B_JOURNAL_PKEY J@SEL$1 11 M 71 M 8 K 01:50
TABLE ACCESS [full] B_POSTING P1@SEL$1 22 M 388 M 33 K 06:56
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P1@SEL$3 1 5 1 00:01 "ACC_P1"."ID"="P1"."ACCOUNT_ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P2@SEL$4 1 5 1 00:01 "ACC_P2"."ID"="P2"."ACCOUNT_ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ@SEL$5 1 12 2 00:01 "PJ"."JOURNAL_ID"="J"."ID"
INDEX [unique scan] P_POLICY_PKEY POLICY@SEL$6 1 1 00:01 "POLICY"."ID"="PJ"."POLICY_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY@SEL$6 1 17 2 00:01
INDEX [range scan] PP_OPTOUT_ EO@SEL$8 1 14 1 00:01 "EO"."ID"="POLICY"."EMPLOYEROFFERING_ID"
TABLE ACCESS [full] M_OFFERING O@SEL$9 104 624 4 00:01
LOAD AS SELECT SYS_TEMP_0FD9D7109_12EBD346
FILTER SUM("P12"."AMOUNT")>0
HASH [group by] 1 66 122 K 25:03
VIEW from$_subquery$_034@SEL$96 1 66 122 K 25:03
NESTED LOOPS 1 76 122 K 25:03
VIEW from$_subquery$_032@SEL$16 1 67 122 K 25:03
NESTED LOOPS
NESTED LOOPS 1 79 122 K 25:03
VIEW from$_subquery$_030@SEL$15 1 62 122 K 25:03
NESTED LOOPS 1 74 122 K 25:03
VIEW from$_subquery$_028@SEL$14 1 62 122 K 25:03
NESTED LOOPS
NESTED LOOPS 1 52 122 K 25:03
VIEW from$_subquery$_026@SEL$13 11 484 122 K 25:03
NESTED LOOPS
NESTED LOOPS 11 594 122 K 25:03
VIEW from$_subquery$_024@SEL$12 11 506 122 K 25:03
HASH JOIN 11 605 122 K 25:03 "P122"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$11 11 231 6 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$11 11 3 00:01 "P122"."INVOICE_ID"=2181230
VIEW from$_subquery$_022@SEL$11 10 M 366 M 122 K 25:02
HASH JOIN 10 M 334 M 122 K 25:02 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [full] B_JOURNAL J12@SEL$10 5 M 53 M 45 K 09:23 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
TABLE ACCESS [full] B_POSTING P12@SEL$10 22 M 480 M 33 K 06:56
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$12 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$12 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$13 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$13 1 8 2 00:01 "from$_subquery$_026"."ACCOUNTTYPE_ID"=1 OR "from$_subquery$_026"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$14 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$15 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$15 1 17 2 00:01
INDEX [range scan] PP_OPTOUT_ EO12@SEL$16 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID"
LOAD AS SELECT SYS_TEMP_0FD9D710A_12EBD346
HASH [group by] 1 95 1 K 00:23
VIEW from$_subquery$_063@SEL$99 1 95 1 K 00:23
NESTED LOOPS 1 89 1 K 00:23
VIEW from$_subquery$_061@SEL$25 1 76 1 K 00:23
NESTED LOOPS
NESTED LOOPS 1 88 1 K 00:23
VIEW from$_subquery$_059@SEL$24 1 71 1 K 00:23
NESTED LOOPS 1 83 1 K 00:23
VIEW from$_subquery$_057@SEL$23 1 71 1 K 00:23
NESTED LOOPS
NESTED LOOPS 1 61 1 K 00:23
VIEW from$_subquery$_055@SEL$22 1 53 1 K 00:23
NESTED LOOPS
NESTED LOOPS 1 63 1 K 00:23
VIEW from$_subquery$_053@SEL$21 1 55 1 K 00:23
NESTED LOOPS
NESTED LOOPS 1 64 1 K 00:23
VIEW from$_subquery$_051@SEL$20 2 86 1 K 00:23
NESTED LOOPS
NESTED LOOPS 2 98 1 K 00:23
VIEW from$_subquery$_049@SEL$19 1 32 1 K 00:23
NESTED LOOPS
NESTED LOOPS 1 35 1 K 00:23
VIEW from$_subquery$_047@SEL$18 940 22 K 947 00:12
NESTED LOOPS
NESTED LOOPS 940 20 K 947 00:12
INDEX [fast full scan] B_CONTRIBUTIONJOURNAL_PKEY CJ@SEL$17 940 11 K 3 00:01
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$17 1 1 00:01 "CJ"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$17 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_CONTRIBUTIONRECORD_PKEY CR@SEL$18 1 1 00:01 "CR"."ID"="CJ"."CONTRIBUTION_ID"
TABLE ACCESS [by index rowid] B_CONTRIBUTIONRECORD CR@SEL$18 1 10 1 00:01
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$19 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$19 2 34 3 00:01
INDEX [range scan] IDX_POSTING_JOURNAL P122@SEL$20 2 2 00:01 "P122"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$20 1 21 3 00:01 "P122"."INVOICE_ID"=2181230 AND "P12"."ID"<>"P122"."ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$21 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$21 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$22 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$22 1 8 2 00:01 "from$_subquery$_055"."ACCOUNTTYPE_ID"=1 OR "from$_subquery$_055"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$23 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$24 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$24 1 17 2 00:01
INDEX [range scan] PP_OPTOUT_ EO12@SEL$25 1 13 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."BILLINGSOURCE_ID"=122
LOAD AS SELECT SYS_TEMP_0FD9D710B_12EBD346
HASH [group by] 1 95 1 K 00:23
VIEW from$_subquery$_082@SEL$100 1 95 1 K 00:23
NESTED LOOPS 1 89 1 K 00:23
VIEW from$_subquery$_080@SEL$34 1 76 1 K 00:23
NESTED LOOPS
NESTED LOOPS 1 88 1 K 00:23
VIEW from$_subquery$_078@SEL$33 1 71 1 K 00:23
NESTED LOOPS 1 83 1 K 00:23
VIEW from$_subquery$_076@SEL$32 1 71 1 K 00:23
NESTED LOOPS
NESTED LOOPS 1 61 1 K 00:23
VIEW from$_subquery$_074@SEL$31 1 53 1 K 00:23
NESTED LOOPS
NESTED LOOPS 1 63 1 K 00:23
VIEW from$_subquery$_072@SEL$30 1 55 1 K 00:23
NESTED LOOPS
NESTED LOOPS 1 64 1 K 00:23
VIEW from$_subquery$_070@SEL$29 2 86 1 K 00:23
NESTED LOOPS
NESTED LOOPS 2 98 1 K 00:23
VIEW from$_subquery$_068@SEL$28 1 32 1 K 00:23
NESTED LOOPS
NESTED LOOPS 1 35 1 K 00:23
VIEW from$_subquery$_066@SEL$27 940 22 K 947 00:12
NESTED LOOPS
NESTED LOOPS 940 20 K 947 00:12
INDEX [fast full scan] B_CONTRIBUTIONJOURNAL_PKEY CJ@SEL$26 940 11 K 3 00:01
INDEX [unique scan] B_JOURNAL_PKEY J12@SEL$26 1 1 00:01 "CJ"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_JOURNAL J12@SEL$26 1 10 2 00:01 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
INDEX [unique scan] B_CONTRIBUTIONRECORD_PKEY CR@SEL$27 1 1 00:01 "CR"."ID"="CJ"."CONTRIBUTION_ID"
TABLE ACCESS [by index rowid] B_CONTRIBUTIONRECORD CR@SEL$27 1 10 1 00:01
INDEX [range scan] IDX_POSTING_JOURNAL P12@SEL$28 2 2 00:01 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_POSTING P12@SEL$28 2 34 3 00:01
INDEX [range scan] IDX_POSTING_JOURNAL P122@SEL$29 2 2 00:01 "P122"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$29 1 21 3 00:01 "P122"."INVOICE_ID"=2181230 AND "P12"."ID"<>"P122"."ID"
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$30 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$30 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$31 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$31 1 8 2 00:01 "from$_subquery$_074"."ACCOUNTTYPE_ID"=1 OR "from$_subquery$_074"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$32 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$33 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$33 1 17 2 00:01
INDEX [range scan] PP_OPTOUT_ EO12@SEL$34 1 13 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID" AND "EO12"."BILLINGSOURCE_ID"=121

Explain Plan 3 (6b of 8)

Anthony Munoz, September 19, 2016 - 6:31 pm UTC

LOAD AS SELECT SYS_TEMP_0FD9D710C_12EBD346
HASH [group by] 1 82 122 K 25:03
VIEW from$_subquery$_097@SEL$101 1 82 122 K 25:03
NESTED LOOPS 1 85 122 K 25:03
VIEW from$_subquery$_095@SEL$41 1 76 122 K 25:03
NESTED LOOPS
NESTED LOOPS 1 88 122 K 25:03
VIEW from$_subquery$_093@SEL$40 1 71 122 K 25:03
NESTED LOOPS 1 83 122 K 25:03
VIEW from$_subquery$_091@SEL$39 1 71 122 K 25:03
NESTED LOOPS
NESTED LOOPS 1 61 122 K 25:03
VIEW from$_subquery$_089@SEL$38 11 583 122 K 25:03
NESTED LOOPS
NESTED LOOPS 11 693 122 K 25:03
VIEW from$_subquery$_087@SEL$37 11 605 122 K 25:03
HASH JOIN 11 704 122 K 25:03 "P122"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$36 11 231 6 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$36 11 3 00:01 "P122"."INVOICE_ID"=2181230
VIEW from$_subquery$_085@SEL$36 10 M 463 M 122 K 25:02
HASH JOIN 10 M 334 M 122 K 25:02 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [full] B_JOURNAL J12@SEL$35 5 M 53 M 45 K 09:23 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
TABLE ACCESS [full] B_POSTING P12@SEL$35 22 M 480 M 33 K 06:56
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$37 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$37 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$38 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$38 1 8 2 00:01 "from$_subquery$_089"."ACCOUNTTYPE_ID"=1 OR "from$_subquery$_089"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$39 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$40 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$40 1 17 2 00:01
INDEX [range scan] PP_OPTOUT_ EO12@SEL$41 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID"
LOAD AS SELECT SYS_TEMP_0FD9D710D_12EBD346
HASH [group by] 1 82 19 00:01
VIEW from$_subquery$_114@SEL$102 1 82 18 00:01
NESTED LOOPS 1 85 18 00:01
VIEW from$_subquery$_112@SEL$49 1 76 17 00:01
NESTED LOOPS
NESTED LOOPS 1 88 17 00:01
VIEW from$_subquery$_110@SEL$48 1 71 15 00:01
NESTED LOOPS 1 83 15 00:01
VIEW from$_subquery$_108@SEL$47 1 71 13 00:01
NESTED LOOPS 1 77 13 00:01
VIEW from$_subquery$_106@SEL$46 1 71 12 00:01
NESTED LOOPS 1 83 12 00:01
VIEW from$_subquery$_104@SEL$45 1 71 11 00:01
NESTED LOOPS 1 77 11 00:01
INDEX [unique scan] B_INVOICE_PKEY INV2@SEL$44 1 6 2 00:01 "INV2"."ID"=2181230
VIEW from$_subquery$_102@SEL$44 1 71 9 00:01
NESTED LOOPS 1 81 9 00:01
VIEW from$_subquery$_100@SEL$43 1 76 8 00:01
NESTED LOOPS
NESTED LOOPS 1 36 8 00:01
TABLE ACCESS [by index rowid] B_JOURNAL J2@SEL$42 1 21 5 00:01 "J2"."ACTIVITY_ID"=612 AND ("J2"."SETTLE_STATUS_ID"=474 OR "J2"."SETTLE_STATUS_ID"=476) AND ("J2"."HIDDEN" IS NULL OR "J2"."HIDDEN"<>1)
INDEX [range scan] IDX_JOURNAL_INVOICE_ID J2@SEL$42 13 3 00:01 "J2"."INVOICE_ID"=2181230
INDEX [range scan] IDX_POSTING_JOURNAL P2@SEL$42 2 2 00:01 "J2"."ID"="P2"."JOURNAL_ID"
TABLE ACCESS [by index rowid] B_POSTING P2@SEL$42 2 30 3 00:01 "P2"."AMOUNT"<>0
INDEX [unique scan] B_SAVINGSACCOUNT_PKEY SA2@SEL$43 1 5 1 00:01 "SA2"."ACCOUNT_ID"="P2"."ACCOUNT_ID"
INDEX [range scan] B_ADVANCEJOURNAL_PKEY AJ2@SEL$45 1 12 1 00:01 "AJ2"."ADVANCE_JOURNAL_ID"="J2"."ID"
INDEX [unique scan] B_JOURNAL_PKEY PARENTJ2@SEL$46 1 6 1 00:01 "PARENTJ2"."ID"="AJ2"."POLICY_JOURNAL_ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ2@SEL$47 1 12 2 00:01 "PJ2"."JOURNAL_ID"="PARENTJ2"."ID"
INDEX [unique scan] P_POLICY_PKEY POLICY2@SEL$48 1 1 00:01 "POLICY2"."ID"="PJ2"."POLICY_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY2@SEL$48 1 17 2 00:01
INDEX [range scan] PP_OPTOUT_ EO2@SEL$49 1 9 1 00:01 "EO2"."ID"="POLICY2"."EMPLOYEROFFERING_ID"
LOAD AS SELECT SYS_TEMP_0FD9D710E_12EBD346
HASH [group by] 1 82 122 K 25:03
VIEW from$_subquery$_129@SEL$103 1 82 122 K 25:03
NESTED LOOPS 1 85 122 K 25:03
VIEW from$_subquery$_127@SEL$56 1 76 122 K 25:03
NESTED LOOPS
NESTED LOOPS 1 88 122 K 25:03
VIEW from$_subquery$_125@SEL$55 1 71 122 K 25:03
NESTED LOOPS 1 83 122 K 25:03
VIEW from$_subquery$_123@SEL$54 1 71 122 K 25:03
NESTED LOOPS
NESTED LOOPS 1 61 122 K 25:03
VIEW from$_subquery$_121@SEL$53 11 583 122 K 25:03
NESTED LOOPS
NESTED LOOPS 11 693 122 K 25:03
VIEW from$_subquery$_119@SEL$52 11 605 122 K 25:03
HASH JOIN 11 704 122 K 25:03 "P122"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [by index rowid] B_POSTING P122@SEL$51 11 231 6 00:01
INDEX [range scan] IDX_POSTING_INVOICE P122@SEL$51 11 3 00:01 "P122"."INVOICE_ID"=2181230
VIEW from$_subquery$_117@SEL$51 10 M 463 M 122 K 25:02
HASH JOIN 10 M 334 M 122 K 25:02 "P12"."JOURNAL_ID"="J12"."ID"
TABLE ACCESS [full] B_JOURNAL J12@SEL$50 5 M 53 M 45 K 09:23 "J12"."SETTLE_STATUS_ID"=474 OR "J12"."SETTLE_STATUS_ID"=476
TABLE ACCESS [full] B_POSTING P12@SEL$50 22 M 480 M 33 K 06:56
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P12@SEL$52 1 1 00:01 "ACC_P12"."ID"="P12"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P12@SEL$52 1 8 2 00:01
INDEX [unique scan] B_ACCOUNT_PKEY ACC_P122@SEL$53 1 1 00:01 "ACC_P122"."ID"="P122"."ACCOUNT_ID"
TABLE ACCESS [by index rowid] B_ACCOUNT ACC_P122@SEL$53 1 8 2 00:01 "from$_subquery$_121"."ACCOUNTTYPE_ID"=1 OR "from$_subquery$_121"."ACCOUNTTYPE_ID"=17 OR "ACC_P122"."ACCOUNTTYPE_ID"=1 OR "ACC_P122"."ACCOUNTTYPE_ID"=17
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ12@SEL$54 1 12 2 00:01 "PJ12"."JOURNAL_ID"="J12"."ID"
INDEX [unique scan] P_POLICY_PKEY POLICY12@SEL$55 1 1 00:01 "POLICY12"."ID"="PJ12"."POLICY_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY12@SEL$55 1 17 2 00:01
INDEX [range scan] PP_OPTOUT_ EO12@SEL$56 1 9 1 00:01 "EO12"."ID"="POLICY12"."EMPLOYEROFFERING_ID"
LOAD AS SELECT SYS_TEMP_0FD9D710F_12EBD346
HASH [group by] 1 82 19 00:01
VIEW from$_subquery$_146@SEL$104 1 82 18 00:01
NESTED LOOPS 1 85 18 00:01
VIEW from$_subquery$_144@SEL$64 1 76 17 00:01
NESTED LOOPS
NESTED LOOPS 1 88 17 00:01
VIEW from$_subquery$_142@SEL$63 1 71 15 00:01
NESTED LOOPS 1 83 15 00:01
VIEW from$_subquery$_140@SEL$62 1 71 13 00:01
NESTED LOOPS 1 77 13 00:01
VIEW from$_subquery$_138@SEL$61 1 71 12 00:01
NESTED LOOPS 1 83 12 00:01
VIEW from$_subquery$_136@SEL$60 1 71 11 00:01
NESTED LOOPS 1 77 11 00:01
INDEX [unique scan] B_INVOICE_PKEY INV2@SEL$59 1 6 2 00:01 "INV2"."ID"=2181230
VIEW from$_subquery$_134@SEL$59 1 71 9 00:01
NESTED LOOPS 1 81 9 00:01
VIEW from$_subquery$_132@SEL$58 1 76 8 00:01
NESTED LOOPS
NESTED LOOPS 1 36 8 00:01
TABLE ACCESS [by index rowid] B_JOURNAL J2@SEL$57 1 21 5 00:01 "J2"."ACTIVITY_ID"=612 AND ("J2"."SETTLE_STATUS_ID"=474 OR "J2"."SETTLE_STATUS_ID"=476) AND ("J2"."HIDDEN" IS NULL OR "J2"."HIDDEN"<>1)
INDEX [range scan] IDX_JOURNAL_INVOICE_ID J2@SEL$57 13 3 00:01 "J2"."INVOICE_ID"=2181230
INDEX [range scan] IDX_POSTING_JOURNAL P2@SEL$57 2 2 00:01 "J2"."ID"="P2"."JOURNAL_ID"
TABLE ACCESS [by index rowid] B_POSTING P2@SEL$57 2 30 3 00:01 "P2"."AMOUNT"<>0
INDEX [unique scan] B_SAVINGSACCOUNT_PKEY SA2@SEL$58 1 5 1 00:01 "SA2"."ACCOUNT_ID"="P2"."ACCOUNT_ID"
INDEX [range scan] B_ADVANCEJOURNAL_PKEY AJ2@SEL$60 1 12 1 00:01 "AJ2"."ADVANCE_JOURNAL_ID"="J2"."ID"
INDEX [unique scan] B_JOURNAL_PKEY PARENTJ2@SEL$61 1 6 1 00:01 "PARENTJ2"."ID"="AJ2"."POLICY_JOURNAL_ID"
INDEX [range scan] B_POLICYJOURNAL_PKEY PJ2@SEL$62 1 12 2 00:01 "PJ2"."JOURNAL_ID"="PARENTJ2"."ID"
INDEX [unique scan] P_POLICY_PKEY POLICY2@SEL$63 1 1 00:01 "POLICY2"."ID"="PJ2"."POLICY_ID"
TABLE ACCESS [by index rowid] P_POLICY POLICY2@SEL$63 1 17 2 00:01
INDEX [range scan] PP_OPTOUT_ EO2@SEL$64 1 9 1 00:01 "EO2"."ID"="POLICY2"."EMPLOYEROFFERING_ID"

Explain Plan 3 (6c of 8)

Anthony Munoz, September 19, 2016 - 6:32 pm UTC

SORT [order by] 1 587 11 K 02:25
HASH JOIN [outer] 1 587 11 K 02:25 "PAYROLL_SUB_ER"."OFFERING_ID"(+)="JOBS"."OFFERING_ID" AND "PAYROLL_SUB_ER"."JOB_ID"(+)="JOBS"."JOB_ID"
HASH JOIN [outer] 1 564 11 K 02:25 "PAYROLL_SUB_EE"."OFFERING_ID"(+)="JOBS"."OFFERING_ID" AND "PAYROLL_SUB_EE"."JOB_ID"(+)="JOBS"."JOB_ID"
HASH JOIN [outer] 1 541 11 K 02:25 "PPROC1"."OFFERING_ID"(+)="JOBS"."OFFERING_ID" AND "PPROC1"."JOB_ID"(+)="JOBS"."JOB_ID"
HASH JOIN [outer] 1 518 11 K 02:25 "PPROC2"."OFFERING_ID"(+)="JOBS"."OFFERING_ID" AND "PPROC2"."JOB_ID"(+)="JOBS"."JOB_ID"
HASH JOIN [outer] 1 495 11 K 02:25 "HB"."OFFERING_ID"(+)="JOBS"."OFFERING_ID" AND "HB"."JOB_ID"(+)="JOBS"."JOB_ID"
HASH JOIN [outer] 1 472 11 K 02:25 "HOP"."OFFERING_ID"(+)="JOBS"."OFFERING_ID" AND "HOP"."JOB_ID"(+)="JOBS"."JOB_ID"
HASH JOIN [outer] 1 449 11 K 02:25 "PREM_ER"."EMPLOYERPLANYEAR_ID"(+)="JOBS"."EMPLOYERPLANYEAR_ID" AND "PREM_ER"."OFFERING_ID"(+)="JOBS"."OFFERING_ID" AND "PREM_ER"."JOB_ID"(+)="JOBS"."JOB_ID"
HASH JOIN [outer] 1 421 5 K 01:13 "PREM_EE"."EMPLOYERPLANYEAR_ID"(+)="JOBS"."EMPLOYERPLANYEAR_ID" AND "PREM_EE"."OFFERING_ID"(+)="JOBS"."OFFERING_ID" AND "PREM_EE"."JOB_ID"(+)="JOBS"."JOB_ID"
NESTED LOOPS
NESTED LOOPS 1 393 19 00:01
NESTED LOOPS 1 381 18 00:01
NESTED LOOPS 1 334 15 00:01
NESTED LOOPS 1 295 13 00:01
NESTED LOOPS 1 273 12 00:01
NESTED LOOPS 1 227 10 00:01
NESTED LOOPS 1 204 9 00:01
NESTED LOOPS 1 194 7 00:01
NESTED LOOPS 1 179 6 00:01
HASH JOIN 1 160 5 00:01 "JSUM2"."JOB_ID"="JOBS"."JOB_ID" AND "JSUM2"."OFFERING_ID"="JOBS"."OFFERING_ID"
VIEW JSUM2@SEL$65 1 10 2 00:01
TABLE ACCESS [full] SYS_TEMP_0FD9D7109_12EBD346 T1@SEL$77591A96 1 23 2 00:01
VIEW JOBS@SEL$65 22 3 K 2 00:01
TABLE ACCESS [full] SYS_TEMP_0FD9D7108_12EBD346 T1@SEL$F3C4A90C 22 506 2 00:01
TABLE ACCESS [by index rowid] B_PAYSITEINVOICE PSI@SEL$87 1 19 1 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI@SEL$87 1 0 00:01 "PSI"."INVOICE_ID"="JOBS"."INVOICE_ID"
TABLE ACCESS [by index rowid] M_PAYSITE PS@SEL$89 1 15 1 00:01
INDEX [unique scan] M_PAYSITE_PKEY PS@SEL$89 1 0 00:01 "PS"."ID"="PSI"."PAYSITE_ID"
TABLE ACCESS [by index rowid] B_INVOICE INV@SEL$88 1 10 2 00:01 "INV"."INVOICE_TYPE" IS NOT NULL
INDEX [unique scan] B_INVOICE_PKEY INV@SEL$88 1 1 00:01 "INV"."ID"="PSI"."INVOICE_ID"
TABLE ACCESS [by index rowid] M_SIMPLELOOKUP INVTYPE@SEL$90 1 23 1 00:01
INDEX [unique scan] M_SIMPLELOOKUP_PKEY INVTYPE@SEL$90 1 0 00:01 "INVTYPE"."ID"="INV"."INVOICE_TYPE"
TABLE ACCESS [by index rowid] M_JOB JB@SEL$82 1 46 2 00:01
INDEX [unique scan] M_JOB_PKEY JB@SEL$82 1 1 00:01 "JB"."ID"="JOBS"."JOB_ID"
TABLE ACCESS [by index rowid] M_EMPLOYER ER@SEL$84 1 22 1 00:01
INDEX [unique scan] M_EMPLOYER_PKEY ER@SEL$84 1 0 00:01 "ER"."ID"="JB"."EMPLOYER_ID"
TABLE ACCESS [by index rowid] M_PERSON PERSON@SEL$83 1 39 2 00:01
INDEX [unique scan] M_PERSON_PKEY PERSON@SEL$83 1 1 00:01 "PERSON"."ID"="JB"."EMPLOYEE_ID"
TABLE ACCESS [by index rowid] M_JOBSTATUS JS@SEL$85 1 47 3 00:01
INDEX [range scan] IX_JSTATUS_FULL JS@SEL$85 1 2 00:01 "JS"."JOB_ID"="JB"."ID" AND "JS"."VT_BEGIN"<= (SELECT TRUNC(INTERNAL_FUNCTION("SYSTEM_DATE")) FROM "CYCOWNER"."M_SYSTEM_STATUS" "M_SYSTEM_STATUS")
TABLE ACCESS [full] M_SYSTEM_STATUS M_SYSTEM_STATUS@SEL$106 1 8 3 00:01
INDEX [unique scan] M_JOBSTATUSTYPE_PKEY JST@SEL$86 1 0 00:01 "JST"."ID"="JS"."STATUS"
TABLE ACCESS [by index rowid] M_JOBSTATUSTYPE JST@SEL$86 1 12 1 00:01
VIEW PREM_EE@SEL$68 3 K 91 K 5 K 01:12
HASH [group by] 3 K 218 K 5 K 01:12
HASH JOIN 3 K 218 K 5 K 01:12 "EO"."ID"="PP"."EMPLOYEROFFERING_ID"
HASH JOIN 3 K 159 K 5 K 01:12 "PREMIUMS"."POLICY_ID"="PP"."ID"
TABLE ACCESS [full] P_PREMIUM PREMIUMS@SEL$92 3 K 104 K 2 K 00:35 SYS_EXTRACT_UTC(INTERNAL_FUNCTION("PREMIUMS"."TT_START"))<=SYS_EXTRACT_UTC(CURRENT_TIMESTAMP(6)) AND SYS_EXTRACT_UTC(INTERNAL_FUNCTION("PREMIUMS"."TT_STOP"))>SYS_EXTRACT_UTC(CURRENT_TIMESTAMP(6))
TABLE ACCESS [full] P_POLICY PP@SEL$91 1 M 20 M 2 K 00:37
INDEX [fast full scan] PP_OPTOUT_ EO@SEL$91 12 K 216 K 35 00:01 "EO"."BILLINGSOURCE_ID"=121
VIEW PREM_ER@SEL$66 3 K 91 K 5 K 01:12
HASH [group by] 3 K 218 K 5 K 01:12
HASH JOIN 3 K 218 K 5 K 01:12 "EO"."ID"="PP"."EMPLOYEROFFERING_ID"
HASH JOIN 3 K 159 K 5 K 01:12 "PREMIUMS"."POLICY_ID"="PP"."ID"
TABLE ACCESS [full] P_PREMIUM PREMIUMS@SEL$94 3 K 104 K 2 K 00:35 SYS_EXTRACT_UTC(INTERNAL_FUNCTION("PREMIUMS"."TT_START"))<=SYS_EXTRACT_UTC(CURRENT_TIMESTAMP(6)) AND SYS_EXTRACT_UTC(INTERNAL_FUNCTION("PREMIUMS"."TT_STOP"))>SYS_EXTRACT_UTC(CURRENT_TIMESTAMP(6))
TABLE ACCESS [full] P_POLICY PP@SEL$93 1 M 20 M 2 K 00:37
INDEX [fast full scan] PP_OPTOUT_ EO@SEL$93 11 K 205 K 35 00:01 "EO"."BILLINGSOURCE_ID"=122
VIEW HOP@SEL$80 1 23 2 00:01
TABLE ACCESS [full] SYS_TEMP_0FD9D710F_12EBD346 T1@SEL$DFE52374 1 23 2 00:01
VIEW HB@SEL$78 1 23 2 00:01
TABLE ACCESS [full] SYS_TEMP_0FD9D710E_12EBD346 T1@SEL$DF7C8067 1 23 2 00:01
VIEW PPROC2@SEL$76 1 23 2 00:01
TABLE ACCESS [full] SYS_TEMP_0FD9D710D_12EBD346 T1@SEL$7D82ACEE 1 23 2 00:01
VIEW PPROC1@SEL$74 1 23 2 00:01
TABLE ACCESS [full] SYS_TEMP_0FD9D710C_12EBD346 T1@SEL$1DEB6545 1 23 2 00:01
VIEW PAYROLL_SUB_EE@SEL$72 1 23 2 00:01
TABLE ACCESS [full] SYS_TEMP_0FD9D710B_12EBD346 T1@SEL$71C7A08B 1 23 2 00:01
VIEW PAYROLL_SUB_ER@SEL$70 1 23 2 00:01
TABLE ACCESS [full] SYS_TEMP_0FD9D710A_12EBD346 T1@SEL$A9E4023B 1 23 2 00:01

Query 4 Global Temps (7 of 8)

Anthony Munoz, September 19, 2016 - 6:34 pm UTC

QUERY (Total execution time 2.094 sec.):

delete cmpinv_job;
delete cmpinv_amount;
delete cmpinv_premium;

-- jobs
insert into cmpinv_job (invoice_id, job_id, offering_id, employerplanyear_id, offering_alt_id)
select distinct p2.invoice_id, policy.job_id, eo.offering_id, eo.employerplanyear_id, o.alternate_id
from cycowner.b_journal j
    join cycowner.b_posting p1           on p1.journal_id = j.id
    join cycowner.b_posting p2           on p2.journal_id = j.id
                                            and p1.id<>p2.id
    join cycowner.b_account acc_p1       on acc_p1.id = p1.account_id
    join cycowner.b_account acc_p2       on acc_p2.id = p2.account_id
    join cycowner.b_policyjournal pj     on pj.journal_id = j.id
    join cycowner.p_policy policy        on policy.id = pj.policy_id
    join cycowner.b_paysiteinvoice psi   on psi.invoice_id = p2.invoice_id
    join cycowner.m_employeroffering eo  on eo.id = policy.employeroffering_id
    join cycowner.m_offering o           on o.id = eo.offering_id
where p2.invoice_id = 2181230
;

-- Payroll Contributions (amount type 1)
insert into cmpinv_amount (invoice_id, job_id, offering_id, sum_amount, amount_type)
select p122.invoice_id, policy12.job_id, eo12.offering_id, sum(p12.amount), 1
from cycowner.b_journal j12
    join cycowner.b_posting p12           on p12.journal_id = j12.id
    join cycowner.b_posting p122          on p122.journal_id = j12.id
                                            and p12.id<>p122.id
    join cycowner.b_account acc_p12       on acc_p12.id = p12.account_id
    join cycowner.b_account acc_p122      on acc_p122.id = p122.account_id
    join cycowner.b_policyjournal pj12    on pj12.journal_id = j12.id
    join cycowner.p_policy policy12       on policy12.id = pj12.policy_id
    join cycowner.m_employeroffering eo12 on eo12.id = policy12.employeroffering_id
where p122.invoice_id = 2181230
    and
        (
        acc_p12.accounttype_id in (1, 17)
        or acc_p122.accounttype_id in (1, 17)
        )
    and j12.settle_status_id in (474, 476)
group by p122.invoice_id, policy12.job_id, eo12.offering_id
having sum(p12.amount) > 0
;

-- ERPayrollSubmitted (amount type 2)
insert into cmpinv_amount (invoice_id, job_id, offering_id, sum_amount, amount_type)
select p122.invoice_id, policy12.job_id, eo12.offering_id, sum(cr.amount) as sum_amount, 2
from cycowner.b_journal j12
    join cycowner.b_contributionjournal cj on cj.journal_id = j12.id
    join cycowner.b_contributionrecord cr  on cr.id = cj.contribution_id
    join cycowner.b_posting p12            on p12.journal_id = j12.id
    join cycowner.b_posting p122           on p122.journal_id = j12.id
                                    and p12.id<>p122.id
    join cycowner.b_account acc_p12        on acc_p12.id = p12.account_id
    join cycowner.b_account acc_p122       on acc_p122.id = p122.account_id
    join cycowner.b_policyjournal pj12     on pj12.journal_id = j12.id
    join cycowner.p_policy policy12        on policy12.id = pj12.policy_id
    join cycowner.m_employeroffering eo12  on eo12.id = policy12.employeroffering_id
where p122.invoice_id = 2181230
    and
    (
        acc_p12.accounttype_id in (1,17)
        or acc_p122.accounttype_id in (1,17)
    )
    and j12.settle_status_id in (474,476)
    and eo12.billingsource_id = 122
group by p122.invoice_id, policy12.job_id, eo12.offering_id
;

-- EEPayrollSubmitted (amount type 3)
insert into cmpinv_amount (invoice_id, job_id, offering_id, sum_amount, amount_type)
select p122.invoice_id, policy12.job_id, eo12.offering_id, sum(cr.amount) as sum_amount, 3
from cycowner.b_journal j12
    join cycowner.b_contributionjournal cj on cj.journal_id = j12.id
    join cycowner.b_contributionrecord cr  on cr.id = cj.contribution_id
    join cycowner.b_posting p12            on p12.journal_id = j12.id
    join cycowner.b_posting p122           on p122.journal_id = j12.id
                                            and p12.id<>p122.id
    join cycowner.b_account acc_p12        on acc_p12.id = p12.account_id
    join cycowner.b_account acc_p122       on acc_p122.id = p122.account_id
    join cycowner.b_policyjournal pj12     on pj12.journal_id = j12.id
    join cycowner.p_policy policy12        on policy12.id = pj12.policy_id
    join cycowner.m_employeroffering eo12  on eo12.id = policy12.employeroffering_id
where p122.invoice_id = 2181230
    and
    (
        acc_p12.accounttype_id in (1,17)
        or acc_p122.accounttype_id in (1,17)
    )
    and j12.settle_status_id in (474,476)
    and eo12.billingsource_id = 121
group by p122.invoice_id, policy12.job_id, eo12.offering_id
;

-- TotalPayrollProcessed1 (amount type 4)
insert into cmpinv_amount (invoice_id, job_id, offering_id, sum_amount, amount_type)
select p122.invoice_id, policy12.job_id, eo12.offering_id, sum(p12.amount) as sum_amount, 4
from cycowner.b_journal j12
    join cycowner.b_posting p12           on p12.journal_id   = j12.id
    join cycowner.b_posting p122          on p122.journal_id  = j12.id
                                            and p12.id<>p122.id
    join cycowner.b_account acc_p12       on acc_p12.id       = p12.account_id
    join cycowner.b_account acc_p122      on acc_p122.id      = p122.account_id
    join cycowner.b_policyjournal pj12    on pj12.journal_id  = j12.id
    join cycowner.p_policy policy12       on policy12.id      = pj12.policy_id
    join cycowner.m_employeroffering eo12 on eo12.id          = policy12.employeroffering_id
where p122.invoice_id = 2181230
    and
    (
        acc_p12.accounttype_id in (1,17)
        or acc_p122.accounttype_id in (1,17)
    )
    and j12.settle_status_id in (474,476)
group by p122.invoice_id, policy12.job_id, eo12.offering_id
;

-- TotalPayrollProcessed2 (amount type 5)
insert into cmpinv_amount (invoice_id, job_id, offering_id, sum_amount, amount_type)
select inv2.id, policy2.job_id, eo2.offering_id, sum(p2.amount) as sum_amount, 5
from cycowner.b_posting p2
    join cycowner.b_journal j2           on j2.id                  = p2.journal_id
    join cycowner.b_savingsaccount sa2   on sa2.account_id         = p2.account_id
    join cycowner.b_invoice inv2         on inv2.id                = j2.invoice_id
    join cycowner.b_advancejournal aj2   on aj2.advance_journal_id = j2.id
    join cycowner.b_journal parentj2     on parentj2.id            = aj2.policy_journal_id
    join cycowner.b_policyjournal pj2    on pj2.journal_id         = parentj2.id
    join cycowner.p_policy policy2       on policy2.id             = pj2.policy_id
    join cycowner.m_employeroffering eo2 on eo2.id                 = policy2.employeroffering_id
where inv2.id = 2181230
    and j2.activity_id = 612
    and
    (
        j2.hidden is null
        or j2.hidden <> 1
    )
    and p2.amount <> 0
    and j2.settle_status_id in(474,476)
group by inv2.id, policy2.job_id, eo2.offering_id
;

-- AppliedToHsaBalance (amount type 6)
insert into cmpinv_amount (invoice_id, job_id, offering_id, sum_amount, amount_type)
select p122.invoice_id, policy12.job_id, eo12.offering_id, sum(p12.amount) as sum_amount, 6
from cycowner.b_journal j12
    join cycowner.b_posting p12           on p12.journal_id = j12.id
    join cycowner.b_posting p122          on p122.journal_id = j12.id and p12.id<>p122.id
    join cycowner.b_account acc_p12       on acc_p12.id = p12.account_id
    join cycowner.b_account acc_p122      on acc_p122.id = p122.account_id
    join cycowner.b_policyjournal pj12    on pj12.journal_id = j12.id
    join cycowner.p_policy policy12       on policy12.id = pj12.policy_id
    join cycowner.m_employeroffering eo12 on eo12.id = policy12.employeroffering_id
where p122.invoice_id = 2181230
    and
    (
        acc_p12.accounttype_id in (1,17)
        or acc_p122.accounttype_id in (1,17)
    )
    and j12.settle_status_id in (474,476)
group by p122.invoice_id, policy12.job_id, eo12.offering_id
;

-- AppliedToHsaOdPayBack (amount type 7)
insert into cmpinv_amount (invoice_id, job_id, offering_id, sum_amount, amount_type)
select inv2.id, policy2.job_id, eo2.offering_id, sum(p2.amount) as sum_amount, 7
from cycowner.b_posting p2
    join cycowner.b_journal j2           on j2.id = p2.journal_id
    join cycowner.b_savingsaccount sa2   on sa2.account_id = p2.account_id
    join cycowner.b_invoice inv2         on inv2.id = j2.invoice_id
    join cycowner.b_advancejournal aj2   on aj2.advance_journal_id = j2.id
    join cycowner.b_journal parentj2     on parentj2.id = aj2.policy_journal_id
    join cycowner.b_policyjournal pj2    on pj2.journal_id = parentj2.id
    join cycowner.p_policy policy2       on policy2.id = pj2.policy_id
    join cycowner.m_employeroffering eo2 on eo2.id = policy2.employeroffering_id
where inv2.id = 2181230
    and j2.activity_id = 612
    and
    (
        j2.hidden is null
        or j2.hidden <> 1
    )
    and p2.amount <> 0
    and j2.settle_status_id in( 476,474)
group by inv2.id, policy2.job_id, eo2.offering_id
;

-- EmployerAnnualElection (prem type 1)
insert into cmpinv_premium (invoice_id, job_id, offering_id, employerplanyear_id, sum_prem, prem_type)
select 2181230
    , pp.job_id, eo.offering_id, eo.employerplanyear_id, sum(premiums.premium) as sum_prem, 1
from cycowner.p_policy pp
    join cycowner.m_employeroffering eo  on eo.id = pp.employeroffering_id
    join cmpinv_job j                    on j.job_id = pp.job_id
                                            and j.offering_id = eo.offering_id
                                            and j.employerplanyear_id = eo.employerplanyear_id
    join cycowner.p_premium premiums     on premiums.policy_id = pp.id
where 1=1
    and eo.billingsource_id  = 122
    and premiums.tt_start <= current_timestamp
    and premiums.tt_stop   > current_timestamp
group by pp.job_id, eo.offering_id, eo.employerplanyear_id
;

-- EmployeeAnnualElection (prem type 2)
insert into cmpinv_premium (invoice_id, job_id, offering_id, employerplanyear_id, sum_prem, prem_type)
select 2181230
    , pp.job_id, eo.offering_id, eo.employerplanyear_id, sum(premiums.premium) as sum_prem, 2
from cycowner.p_policy pp
    join cycowner.m_employeroffering eo  on eo.id = pp.employeroffering_id
    join cmpinv_job j                    on j.job_id = pp.job_id
                                            and j.offering_id = eo.offering_id
                                            and j.employerplanyear_id = eo.employerplanyear_id
    join cycowner.p_premium premiums     on premiums.policy_id = pp.id
where 1=1
    and eo.billingsource_id  = 121
    and premiums.tt_start <= current_timestamp
    and premiums.tt_stop   > current_timestamp
group by pp.job_id, eo.offering_id, eo.employerplanyear_id
;

select
    er.name as EmployerName,
    j.invoice_id as InvoiceNumber,
    person.first_name firstname,
    person.last_name lastname,
    person.ssn,
    ('xxx-xx-' || person.last_four_ssn) as last_four_ssn,
    jb.external_employee_id as EmployerEmployeeId,
    jb.partner_employee_id as PartnerEmployeeId,
    jb.division as Division1,
    jb.division2 as Division2,
    jb.division3 as Division3,
    jb.division4 as Division4,
    ps.name as PaysiteName,
    j.offering_alt_id as AccountType,
    case
        when jb.coverage_level = 'F'
        then 'Family'
        when  jb.coverage_level = 'S'
        then 'Single'
        else ''
    end as CoverageLevel,
    jst.name AS Status,
    to_char(js.vt_begin,'MM/dd/yyyy') AS EmployeeEffectiveDate,
    case
        when js.status = 2
        then to_char(js.vt_begin,'MM/dd/yyyy')
        else ''
    end as TermDate,
    nvl(erp.sum_prem, 0) as EmployerAnnualElection,
    nvl(eep.sum_prem, 0) as EmployeeAnnualElection,
    nvl(erp.sum_prem, 0) + nvl(eep.sum_prem, 0) as TotalAnnualElection,
    nvl(psr.sum_amount, 0) as ERPayrollSubmitted,
    nvl(pse.sum_amount, 0) as EEPayrollSubmitted,
    nvl(psr.sum_amount, 0) + nvl(pse.sum_amount, 0) as TotalPayrollSubmitted,
    nvl(pp1.sum_amount, 0) + nvl(pp2.sum_amount, 0) as TotalPayrollProcessed,
    case when j.offering_id in (5) then nvl(hb.sum_amount, 0) else 0 end as AppliedToHsaBalance,
    case when j.offering_id in (5) then nvl(hop.sum_amount, 0) else 0 end as AppliedToHsaOdPayBack,
    nvl(hb.sum_amount, 0) + nvl(hop.sum_amount, 0) - (nvl(pp1.sum_amount, 0) + nvl(pp2.sum_amount, 0)) as DespositsNotApplied,
    to_char(psi.deduction_date,'mm/dd/yyyy') as ContributionDate,
    invType.name AS InvoiceType
--    , 1 as f_u_oracle
from cmpinv_job j
    -- Payroll Contributions (amount type 1)
    join cmpinv_amount pc         on pc.invoice_id = j.invoice_id
                                           and pc.job_id = j.job_id
                                           and pc.offering_id = j.offering_id
                                           and pc.amount_type = 1
    -- EmployerAnnualElection (prem type 1)
    left join cmpinv_premium erp  on erp.invoice_id = j.invoice_id
                                           and erp.job_id = j.job_id
                                           and erp.offering_id = j.offering_id
                                           and erp.prem_type = 1
    -- EmployeeAnnualElection (prem type 2)
    left join cmpinv_premium eep  on eep.invoice_id = j.invoice_id
                                           and eep.job_id = j.job_id
                                           and eep.offering_id = j.offering_id
                                           and eep.prem_type = 2
    -- ERPayrollSubmitted (amount type 2)
    left join cmpinv_amount psr   on psr.invoice_id = j.invoice_id
                                           and psr.job_id = j.job_id
                                           and psr.offering_id = j.offering_id
                                           and psr.amount_type = 2
    -- EEPayrollSubmitted (amount type 3)
    left join cmpinv_amount pse   on pse.invoice_id = j.invoice_id
                                           and pse.job_id = j.job_id
                                           and pse.offering_id = j.offering_id
                                           and pse.amount_type = 3
    -- TotalPayrollProcessed1 (amount type 4)
    left join cmpinv_amount pp1   on pp1.invoice_id = j.invoice_id
                                           and pp1.job_id = j.job_id
                                           and pp1.offering_id = j.offering_id
                                           and pp1.amount_type = 4
    -- TotalPayrollProcessed2 (amount type 5)
    left join cmpinv_amount pp2   on pp2.invoice_id = j.invoice_id
                                           and pp2.job_id = j.job_id
                                           and pp2.offering_id = j.offering_id
                                           and pp2.amount_type = 5
    -- AppliedToHsaBalance (amount type 6)
    left join cmpinv_amount hb    on hb.invoice_id = j.invoice_id
                                           and hb.job_id = j.job_id
                                           and hb.offering_id = j.offering_id
                                           and hb.amount_type = 6
    -- AppliedToHsaOdPayBack (amount type 7)
    left join cmpinv_amount hop   on hop.invoice_id = j.invoice_id
                                           and hop.job_id = j.job_id
                                           and hop.offering_id = j.offering_id
                                           and hop.amount_type = 7
    join cycowner.m_job jb                 on jb.id = j.job_id
    join cycowner.m_person person          on person.id = jb.employee_id
    join cycowner.m_employer er            on er.id = jb.employer_id
    join cycowner.m_system_status ss       on ss.id = 1
    join cycowner.m_jobstatus js           on js.job_id = j.job_id
                                           and js.tt_start <= current_timestamp
                                           and js.tt_stop > current_timestamp
                                           and js.vt_begin <= trunc(ss.system_date)
                                           and js.vt_end > trunc(ss.system_date)
    join cycowner.m_jobstatustype jst      on jst.id = js.status
    join cycowner.b_paysiteinvoice psi     on psi.invoice_id = j.invoice_id
    join cycowner.b_invoice inv            on inv.id = psi.invoice_id
    join cycowner.m_paysite ps             on ps.id = psi.paysite_id
    join cycowner.m_simplelookup invtype   on invtype.id = inv.invoice_type
where
    1=1
    and j.invoice_id = 2181230

-- added ssn and account type to the order by
order by lastname, firstname, ssn, accounttype
;


GLOBAL TEMP TABLE SCRIPT:

create global temporary table cmpinv_job
(
    invoice_id number(20, 0),
    job_id number(20, 0),
    offering_id number(20, 0),
    employerplanyear_id number(20, 0),
    offering_alt_id varchar2(255)
)
;

create global temporary table cmpinv_amount
(
    invoice_id number(20, 0),
    job_id number(20, 0),
    offering_id number(20, 0),
    amount_type number(2),
    sum_amount number(10, 2)
)
;

create global temporary table cmpinv_premium
(
    invoice_id number(20, 0),
    job_id number(20, 0),
    offering_id number(20, 0),
    employerplanyear_id number(20, 0),
    prem_type number(2),
    sum_prem number(10, 2)
)
;

create index ix_cmpinvjob_in_jo_of_py on cmpinv_job(invoice_id, job_id, offering_id, employerplanyear_id);

create index ix_cmpinvamt_in_jo_of_ty on cmpinv_amount(invoice_id, job_id, offering_id, amount_type);

create index ix_cmpinvprem_in_jo_of_py_ty on cmpinv_premium(invoice_id, job_id, offering_id, employerplanyear_id, prem_type);

Explain Plan 4 (8 of 8)

Anthony Munoz, September 19, 2016 - 6:36 pm UTC

operation object_name object_alias rows bytes cost time part_start part_stop object_node other_tag predicates
SELECT STATEMENT 2 1 K 2 K 00:31
SORT [order by] 2 1 K 2 K 00:31
NESTED LOOPS
NESTED LOOPS 2 1 K 2 K 00:31
NESTED LOOPS 2 1 K 2 K 00:31
NESTED LOOPS 2 1 K 2 K 00:31
HASH JOIN [outer] 2 1 K 2 K 00:31 "HB"."OFFERING_ID"(+)="J"."OFFERING_ID" AND "HB"."JOB_ID"(+)="J"."JOB_ID" AND "HB"."INVOICE_ID"(+)="J"."INVOICE_ID"
HASH JOIN [outer] 2 1 K 2 K 00:31 "PP1"."OFFERING_ID"(+)="J"."OFFERING_ID" AND "PP1"."JOB_ID"(+)="J"."JOB_ID" AND "PP1"."INVOICE_ID"(+)="J"."INVOICE_ID"
HASH JOIN [outer] 2 1 K 2 K 00:31 "ERP"."OFFERING_ID"(+)="J"."OFFERING_ID" AND "ERP"."JOB_ID"(+)="J"."JOB_ID" AND "ERP"."INVOICE_ID"(+)="J"."INVOICE_ID"
NESTED LOOPS 2 1 K 2 K 00:31
HASH JOIN [outer] 2 1 K 2 K 00:31 "HOP"."OFFERING_ID"(+)="J"."OFFERING_ID" AND "HOP"."JOB_ID"(+)="J"."JOB_ID" AND "HOP"."INVOICE_ID"(+)="J"."INVOICE_ID"
HASH JOIN [outer] 2 1 K 2 K 00:31 "PP2"."OFFERING_ID"(+)="J"."OFFERING_ID" AND "PP2"."JOB_ID"(+)="J"."JOB_ID" AND "PP2"."INVOICE_ID"(+)="J"."INVOICE_ID"
HASH JOIN [outer] 2 1000 2 K 00:31 "PSE"."OFFERING_ID"(+)="J"."OFFERING_ID" AND "PSE"."JOB_ID"(+)="J"."JOB_ID" AND "PSE"."INVOICE_ID"(+)="J"."INVOICE_ID"
HASH JOIN [outer] 2 870 2 K 00:31 "PSR"."OFFERING_ID"(+)="J"."OFFERING_ID" AND "PSR"."JOB_ID"(+)="J"."JOB_ID" AND "PSR"."INVOICE_ID"(+)="J"."INVOICE_ID"
HASH JOIN [outer] 2 740 2 K 00:31 "EEP"."OFFERING_ID"(+)="J"."OFFERING_ID" AND "EEP"."JOB_ID"(+)="J"."JOB_ID" AND "EEP"."INVOICE_ID"(+)="J"."INVOICE_ID"
NESTED LOOPS
NESTED LOOPS 2 610 2 K 00:30
NESTED LOOPS 2 586 2 K 00:30
NESTED LOOPS 828 198 K 10 00:01
NESTED LOOPS 1 78 7 00:01
NESTED LOOPS 1 63 6 00:01
NESTED LOOPS 1 40 5 00:01
NESTED LOOPS 1 29 4 00:01
TABLE ACCESS [by index rowid] B_INVOICE INV@SEL$25 1 10 3 00:01 "INV"."INVOICE_TYPE" IS NOT NULL
INDEX [unique scan] B_INVOICE_PKEY INV@SEL$25 1 2 00:01 "INV"."ID"=2181230
TABLE ACCESS [by index rowid] B_PAYSITEINVOICE PSI@SEL$24 1 19 1 00:01
INDEX [unique scan] B_PSINVOICE_PKEY PSI@SEL$24 1 0 00:01 "PSI"."INVOICE_ID"=2181230
TABLE ACCESS [by index rowid] M_SYSTEM_STATUS SS@SEL$21 1 11 1 00:01
INDEX [unique scan] PK_TABLE1 SS@SEL$21 1 0 00:01 "SS"."ID"=1
TABLE ACCESS [by index rowid] M_SIMPLELOOKUP INVTYPE@SEL$27 2 K 48 K 1 00:01
INDEX [unique scan] M_SIMPLELOOKUP_PKEY INVTYPE@SEL$27 1 0 00:01 "INVTYPE"."ID"="INV"."INVOICE_TYPE"
TABLE ACCESS [by index rowid] M_PAYSITE PS@SEL$26 6 K 100 K 1 00:01
INDEX [unique scan] M_PAYSITE_PKEY PS@SEL$26 1 0 00:01 "PS"."ID"="PSI"."PAYSITE_ID"
TABLE ACCESS [full] CMPINV_JOB J@SEL$1 828 135 K 3 00:01 "J"."INVOICE_ID"=2181230
TABLE ACCESS [by index rowid] M_JOBSTATUS JS@SEL$22 1 47 3 00:01 SYS_EXTRACT_UTC(INTERNAL_FUNCTION("JS"."TT_START"))<=SYS_EXTRACT_UTC(CURRENT_TIMESTAMP(6))
INDEX [range scan] PP_JOBSTATUS_BEGIN_END_STOP JS@SEL$22 1 2 00:01 "JS"."JOB_ID"="J"."JOB_ID" AND "JS"."VT_END">TRUNC(INTERNAL_FUNCTION("SS"."SYSTEM_DATE")) AND "JS"."VT_BEGIN"<=TRUNC(INTERNAL_FUNCTION("SS"."SYSTEM_DATE"))
INDEX [unique scan] M_JOBSTATUSTYPE_PKEY JST@SEL$23 1 0 00:01 "JST"."ID"="JS"."STATUS"
TABLE ACCESS [by index rowid] M_JOBSTATUSTYPE JST@SEL$23 1 12 1 00:01
TABLE ACCESS [full] CMPINV_PREMIUM EEP@SEL$4 1 65 3 00:01 "EEP"."PREM_TYPE"(+)=2 AND "EEP"."INVOICE_ID"(+)=2181230
TABLE ACCESS [full] CMPINV_AMOUNT PSR@SEL$6 1 65 4 00:01 "PSR"."AMOUNT_TYPE"(+)=2 AND "PSR"."INVOICE_ID"(+)=2181230
TABLE ACCESS [full] CMPINV_AMOUNT PSE@SEL$8 1 65 4 00:01 "PSE"."AMOUNT_TYPE"(+)=3 AND "PSE"."INVOICE_ID"(+)=2181230
TABLE ACCESS [full] CMPINV_AMOUNT PP2@SEL$12 1 65 4 00:01 "PP2"."AMOUNT_TYPE"(+)=5 AND "PP2"."INVOICE_ID"(+)=2181230
TABLE ACCESS [full] CMPINV_AMOUNT HOP@SEL$16 1 65 4 00:01 "HOP"."AMOUNT_TYPE"(+)=7 AND "HOP"."INVOICE_ID"(+)=2181230
INDEX [range scan] IX_CMPINVAMT_IN_JO_OF_TY PC@SEL$1 1 52 1 00:01 "PC"."INVOICE_ID"=2181230 AND "PC"."JOB_ID"="J"."JOB_ID" AND "PC"."OFFERING_ID"="J"."OFFERING_ID" AND "PC"."AMOUNT_TYPE"=1
TABLE ACCESS [full] CMPINV_PREMIUM ERP@SEL$2 828 52 K 3 00:01 "ERP"."PREM_TYPE"(+)=1 AND "ERP"."INVOICE_ID"(+)=2181230
TABLE ACCESS [full] CMPINV_AMOUNT PP1@SEL$10 828 52 K 4 00:01 "PP1"."AMOUNT_TYPE"(+)=4 AND "PP1"."INVOICE_ID"(+)=2181230
TABLE ACCESS [full] CMPINV_AMOUNT HB@SEL$14 828 52 K 4 00:01 "HB"."AMOUNT_TYPE"(+)=6 AND "HB"."INVOICE_ID"(+)=2181230
TABLE ACCESS [by index rowid] M_JOB JB@SEL$18 1 46 2 00:01
INDEX [unique scan] M_JOB_PKEY JB@SEL$18 1 1 00:01 "JB"."ID"="J"."JOB_ID"
TABLE ACCESS [by index rowid] M_PERSON PERSON@SEL$19 1 39 2 00:01
INDEX [unique scan] M_PERSON_PKEY PERSON@SEL$19 1 1 00:01 "PERSON"."ID"="JB"."EMPLOYEE_ID"
INDEX [unique scan] M_EMPLOYER_PKEY ER@SEL$20 1 0 00:01 "ER"."ID"="JB"."EMPLOYER_ID"
TABLE ACCESS [by index rowid] M_EMPLOYER ER@SEL$20 1 22 1 00:01

OUTPUT:

Line Pos Text
6 Delete - 0 row(s), executed in 31 ms
7 Delete - 0 row(s), executed in 31 ms
8 Delete - 0 row(s), executed in 31 ms
11 Insert - 828 row(s), executed in 47 ms
28 Insert - 828 row(s), executed in 62 ms
51 Insert - 0 row(s), executed in 62 ms
76 Insert - 0 row(s), executed in 62 ms
101 Insert - 828 row(s), executed in 62 ms
123 Insert - 0 row(s), executed in 32 ms
147 Insert - 828 row(s), executed in 78 ms
168 Insert - 0 row(s), executed in 31 ms
192 Insert - 828 row(s), executed in 78 ms
209 Insert - 0 row(s), executed in 62 ms
225 Select, executed in 515 ms
256 first records fetched in 62 ms
Total execution time 2.094 sec.

More to Explore

Hints

Need more information on hints? Check out the complete hint descriptions