Hello!

Frankly speaking I got lost in your verbal description of tables and
indexes. Can you please provide actual cache configurations or CREATE TABLE
statements (obfuscated if needed so)?

Otherwise I guess that query planner expects you won't have too much
entries after WHERE so it's more important to choose the one used in WHERE
(or in JOIN).

Regards,
-- 
Ilya Kasnacheev


чт, 24 янв. 2019 г. в 18:10, gourav10041996 <gourav.agra...@blackrock.com>:

> To simplify our use-case, we created two caches using the SQL query and
> loaded data consisting of about 4 million records and 60k records
> approximately, in the respective caches with INDEX created on all the
> columns. Ignite is set up to run on a single node, meaning all the data is
> present on the same node. The query used for testing/the one we are facing
> issue with is of the type -
>
> SELECT * FROM CACHE1 C1, CACHE2 C2  WHERE  C1.JOINCol = C2.JOINCol AND
> C1.COL1 = 'someValue' ORDER BY C1.COL2
>
> The above query execution leads to the Ignite thread memory rising
> extensively, eventually leading to heap OOME. When the heap memory was
> increased to about 14GB,  we were able to get the results back, but the
> processing time of the query was too long, about 2-4 minutes ( with CPUs
> =2).
>
> We ran an EXPLAIN for the above query and found out that INDEX was created
> on COL1 for C1 cache and on JOINCol for C2 cache. There was no index on the
> sorted column. We think the problem of 'slow querying and huge heap memory
> requirement' is because of the absence of an index in the sorted column.
> Whenever there is a condition present in the WHERE clause ( in our example
> C1.COL1='someValue'), Ignite is using an INDEX for that column and there is
> no INDEX being created on the ORDER BY column.
>
> And for our use-case, it is imperative that we have a condition in the
> where
> clause ( to filter out the data) and a join condition apart from the order
> by clause.
>
>  We tried the multiple column indexing strategy on the COL1, COL2 as per
> our
> use case.
>
>  In case of a composite index with the order as (COL1, COL2), INDEX was
> created only for the COL1.
>
> While for the composite index order as (COL2, COL1), INDEX was getting
> created for both COL1 and COL2 and the results were index sorted. ( But
> only
> in case of the absence of an INDEX for COL1, it looks for the ORDER BY
> clause column and uses a composite index). But, if we don't have a separate
> INDEX for COL1, it again poses a problem as COL1 is something which is
> heavily used for filtering in all other queries. So an INDEX on COL1 is
> necessary.
>
> To summarize, In case there is a condition present in the WHERE clause,
> Ignite uses the WHERE clause column for indexing, and therefore there is no
> INDEX in the sorting column, resulting in severe query performance, which
> can eventually lead us to our system going down.
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>

Reply via email to