Optimization of greater than operator

前端 未结 3 471
不知归路
不知归路 2021-01-25 05:09

credit table and validtransaction table have million record data from year 2008 onwards.

We are doing a migration. So I need to find out the credittypeids which are no

相关标签:
3条回答
  • 2021-01-25 05:47

    I'm thinking aggregation:

    SELECT C.CREDITTYPEID
    FROM CREDIT C
    GROUP BY C.CREDITTYPEID
    HAVING MAX(C.PERIODSEQ) < 1055;
    

    This assumes that the credit type is used in at least one credit record.

    Otherwise, for your version of the query, you specifically want an index on CREDIT(CREDITTYPEID, PERIODSEQ). The ordering of the keys matters, and this is the correct order for your query.

    0 讨论(0)
  • 2021-01-25 05:53

    The following index on the CREDIT table should help:

    CREATE INDEX idx ON CREDIT (PERIODSEQ, CREDITTYPEID);
    

    This should allow the EXISTS clause lookup to evaluate more quickly. You could also try the following variant index, which reverses the order of the columns:

    CREATE INDEX idx ON CREDIT (CREDITTYPEID, PERIODSEQ);
    
    0 讨论(0)
  • 2021-01-25 06:01

    This should return your (distinct!) list of CREDITTYPEID that were used in the past, but are not used curretnly (after PERIODSEQ 1055)

    SELECT CREDITTYPEID  /* used before 1055 */
    FROM CREDITTYPE ct
    WHERE PERIODSEQ < 1055
    MINUS
    SELECT CREDITTYPEID /* used after 1055 */
    FROM CREDITTYPE ct
    WHERE PERIODSEQ>=1055;
    

    As the column name suggest CREDITTYPEID is a type so there are several rows in the table with the same typeId.

    The query above return only the distinct list and uses no hash anti join.

    You may add parallel option (with the PARALLEL hint) if your HW allows it.

    0 讨论(0)
提交回复
热议问题