You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by Rajesh Kishore <ra...@gmail.com> on 2018/02/03 15:35:33 UTC
[Resolved]Re: Issues with sub query IN clause
You rock Andrey, the trick worked , tried the same in api, including your
response for everyone
Orginal query
-----------------------------------------------------
SELECT st.entryID,st.attrName,st.attrValue, st.attrsType
FROM
(SELECT entryID as entryID FROM "objectclass".IGNITE_OBJECTCLASS WHERE
attrValue = 'person'
) t
INNER JOIN "Ignite_DSAttributeStore".IGNITE_DSATTRIBUTESTORE st
ON st.entryID = t.entryID
NOTE : "Ignite_DSAttributeStore".IGNITE_DSATTRIBUTESTORE has index defined
on entryID , following is the explain plan obtained, its scanning the
entire
table
SELECT
ST.ENTRYID,
ST.ATTRNAME,
ST.ATTRVALUE,
ST.ATTRSTYPE
FROM "Ignite_DSAttributeStore".IGNITE_DSATTRIBUTESTORE ST
/* "Ignite_DSAttributeStore".IGNITE_DSATTRIBUTESTORE.__SCAN_ */
INNER JOIN (
SELECT
ENTRYID AS ENTRYID
FROM "objectclass".IGNITE_OBJECTCLASS
WHERE ATTRVALUE = 'person'
) T
/* SELECT
ENTRYID AS ENTRYID
FROM "objectclass".IGNITE_OBJECTCLASS
/++ "objectclass".OBJECTCLASSNDEXED_ATTRVAL_IDX: ATTRVALUE =
'person'
AND ENTRYID IS ?1
++/
WHERE (ATTRVALUE = 'person')
AND (ENTRYID IS ?1): ENTRYID = ST.ENTRYID
*/
ON 1=1
WHERE ST.ENTRYID = T.ENTRYID
(1 row, 1 ms)
How should I approach that "Ignite_DSAttributeStore".IGNITE_DSATTRIBUTESTORE
full scan can be avoided ?
----------------------------------------------------
*Andrey suggested*
--------------------------------------------------
Looks like, H2 optimizer changes join order.
Try to set enforceJoinOrder=true for the query if you use ignite API.
If you use JDBC then flag can be set on per connection basis.
---------------------------------------------------
*After suggestion:*
[[SELECT
ST__Z2.ENTRYID AS __C0_0,
ST__Z2.ATTRNAME AS __C0_1,
ST__Z2.ATTRVALUE AS __C0_2,
ST__Z2.ATTRSTYPE AS __C0_3
FROM (
SELECT
__Z0.ENTRYID AS ENTRYID
FROM "objectclass".IGNITE_OBJECTCLASS __Z0
WHERE __Z0.ATTRVALUE = 'person'
) T__Z1
/* SELECT
__Z0.ENTRYID AS ENTRYID
FROM "objectclass".IGNITE_OBJECTCLASS __Z0
/++ "objectclass".OBJECTCLASSNDEXED_ATTRVAL_IDX: ATTRVALUE =
'person' ++/
WHERE __Z0.ATTRVALUE = 'person'
*/
INNER JOIN "Ignite_DSAttributeStore".IGNITE_DSATTRIBUTESTORE ST__Z2
/* "Ignite_DSAttributeStore".IGNITE_DSATTRIBUTESTORE_ENTRYID_IDX:
ENTRYID = T__Z1.ENTRYID */
ON 1=1
WHERE ST__Z2.ENTRYID = T__Z1.ENTRYID
ORDER BY 1], [SELECT
__C0_0 AS ENTRYID,
__C0_1 AS ATTRNAME,
THanks,
Rajesh
__C0_2 AS ATTRVALUE,
__C0_3 AS ATTRSTYPE
FROM PUBLIC.__T0
/* "dn"."merge_sorted" */
ORDER BY 1
On Sat, Feb 3, 2018 at 8:48 PM, Rajesh Kishore <ra...@gmail.com>
wrote:
> Hey Andery,
> Trying this with H2 console as of now , any setting there?
>
> Thanks,
> Rajesh
>