HI,

i am still seeing no index used. Can you verify the below query please?

explain select * from (

( select * from Person p join table(joinId varchar(10) =
('anilkd1','anilkd2')) i on p.id = i.joinId)
UNION
(select * from Person p join table(name varchar(10) = ('Anil1', 'Anil5')) i
on p.name = i.name)

) order by id

and explain plan -

[[SELECT
    _0._KEY AS __C0,
    _0._VAL AS __C1,
    _0.NAME AS __C2,
    _0.ID AS __C3,
    _0.COMPANYID AS __C4,
    _0.JOINID AS __C5
FROM (
    (SELECT
        P._KEY,
        P._VAL,
        P.NAME,
        P.ID,
        P.COMPANYID,
        I.JOINID
    FROM "person-map".PERSON P
    INNER JOIN TABLE(JOINID VARCHAR(10)=('anilkd1', 'anilkd2')) I
        ON 1=1
    WHERE P.ID = I.JOINID)
    UNION
    (SELECT
        P._KEY,
        P._VAL,
        P.NAME,
        P.ID,
        P.COMPANYID,
        I.NAME
    FROM "person-map".PERSON P
    INNER JOIN TABLE(NAME VARCHAR(10)=('Anil1', 'Anil5')) I
        ON 1=1
    WHERE P.ID = I.NAME)
) _0
    /* (SELECT
        P._KEY,
        P._VAL,
        P.NAME,
        P.ID,
        P.COMPANYID,
        I.JOINID
    FROM "person-map".PERSON P
   *     /++ "person-map".PERSON.__SCAN_ ++/*
    INNER JOIN TABLE(JOINID VARCHAR(10)=('anilkd1', 'anilkd2')) I
        /++ function: JOINID = P.ID ++/
        ON 1=1
    WHERE P.ID = I.JOINID)
    UNION
    (SELECT
        P._KEY,
        P._VAL,
        P.NAME,
        P.ID,
        P.COMPANYID,
        I.NAME
    FROM "person-map".PERSON P
       * /++ "person-map".PERSON.__SCAN_ ++/*
    INNER JOIN TABLE(NAME VARCHAR(10)=('Anil1', 'Anil5')) I
        /++ function: NAME = P.ID ++/
        ON 1=1
    WHERE P.ID = I.NAME)
     */
ORDER BY 4], [SELECT
    __C0 AS _KEY,
    __C1 AS _VAL,
    __C2 AS NAME,
    __C3 AS ID,
    __C4 AS COMPANYID,
    __C5 AS JOINID
FROM PUBLIC.__T0
    /* "person-map"."merge_scan" */
ORDER BY 4]]

Cache configuration :

CacheConfiguration<String , Person> pCache = new
CacheConfiguration<>("person-map");
pCache.setIndexedTypes(String.class, Person.class);
pCache.setBackups(0);
pCache.setCacheMode(CacheMode.PARTITIONED);
pCache.setCopyOnRead(false);
pCache.setSwapEnabled(true);
pCache.setOffHeapMaxMemory(100);
pCache.setMemoryMode(CacheMemoryMode.OFFHEAP_TIERED);


public class Person{
@QuerySqlField(index = true)
private String name;
@QuerySqlField(index = true)
private String id;
@QuerySqlField
private String companyId;
private String value;

// removed the getters and setters
}

SqlFieldsQuery sqlQuery = new SqlFieldsQuery("explain select * from ((
select * from Person p join table(joinId varchar(10) =
('anilkd1','anilkd2')) i on p.id = i.joinId) UNION (select * from Person p
join table(name varchar(10) = ('Anil1', 'Anil5')) i on p.name = i.name))
order by id");

List<List<?>> all = testMap.query(sqlQuery).getAll();

Thanks

Reply via email to