1. - I have a nested join query on a table of 8,000,000 records which
performs similar or better than PostreSQL (~10ms) on my small test setup (2x
nodes, 8GB, 2CPU):

SELECT
        mainTable.pk, mainTable.id, mainTable.k, mainTable.v
FROM
        public.test_data AS mainTable
                INNER JOIN (
                        SELECT
                                lastName.id
                        FROM
                                (SELECT id FROM public.test_data WHERE k = 
'trans.cust.last_name' AND v
= 'Smythe-Veall') AS lastName
                                        INNER JOIN
                                                (SELECT id FROM 
public.test_data WHERE k = 'trans.date' AND v =
'2017-12-21') AS transDate ON transDate.id = lastName.id
                                        INNER JOIN
                                                (SELECT id FROM 
public.test_data WHERE k = 'trans.amount' AND cast(v
AS integer) > 90000) AS transAmount ON transAmount.id = lastName.id
                ) AS subTable ON mainTable.id = subTable.id 
ORDER BY 1, 2


2. - By simply adding a WHERE clause at the end, the performance becomes
catastrophic on Ignite (~10s for subsequent queries - first query takes many
minutes). On PostgreSQL performance does not change...

SELECT
        mainTable.pk, mainTable.id, mainTable.k, mainTable.v
FROM
        public.test_data AS mainTable
                INNER JOIN (
                        SELECT
                                lastName.id
                        FROM
                                (SELECT id FROM public.test_data WHERE k = 
'trans.cust.last_name' AND v
= 'Smythe-Veall') AS lastName
                                        INNER JOIN
                                                (SELECT id FROM 
public.test_data WHERE k = 'trans.date' AND v =
'2017-12-21') AS transDate ON transDate.id = lastName.id
                                        INNER JOIN
                                                (SELECT id FROM 
public.test_data WHERE k = 'trans.amount' AND cast(v
AS integer) > 90000) AS transAmount ON transAmount.id = lastName.id
                ) AS subTable ON mainTable.id = subTable.id 
*WHERE
        mainTable.k = 'trans.cust.first_name'*
ORDER BY 1, 2

What can I do to optimise this query for Ignite???

(Table structure and query plans attached for reference)

Thanks,
Jose
table.sql
<http://apache-ignite-users.70518.x6.nabble.com/file/t1652/table.sql>  
good-join-query.txt
<http://apache-ignite-users.70518.x6.nabble.com/file/t1652/good-join-query.txt> 
 
bad-join-query.txt
<http://apache-ignite-users.70518.x6.nabble.com/file/t1652/bad-join-query.txt>  



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to