Is it possible not to full scan table1 for ’table1.col = ?’, but do this check 
only on subset table1.pk IN (…)?

> On 19 Jun 2019, at 23:31, Vincent Poon <vincentp...@apache.org> wrote:
> 
> 'table1.col = ?' will be a full table scan of table1 unless you have a 
> secondary index on table.col
> Check the explain plan to see if it's working as expected
> 
> On Wed, Jun 19, 2019 at 7:43 AM Alexander Batyrshin <0x62...@gmail.com 
> <mailto:0x62...@gmail.com>> wrote:
>  Hello,
> We have 2 tables:
> 
> Table1 - big one (2000M+ rows):
> 
> CREATE TABLE table1 (
>     pk varchar PRIMARY KEY,
>     col varchar
> );
> 
> Table2 - small one (300K rows):
> 
> CREATE TABLE table2 (
>     pk varchar PRIMARY KEY,
>     other varchar
> );
> 
> Query like this work fast (~ 30sec):
> SELECT table1.pk <http://table1.pk/>,  table1.col
> FROM table1
> WHERE table1.pk <http://table1.pk/> IN ( SELECT table2.pk <http://table2.pk/> 
> FROM table2 )
> 
> But query like this work quite slow (>10min):
> SELECT table1.pk <http://table1.pk/>
> FROM table1
> WHERE table1.col = ? AND table1.pk <http://table1.pk/> IN ( SELECT table2.pk 
> <http://table2.pk/> FROM table2 )
> 
> Also query below work slow:
> SELECT *
> FROM (
>     SELECT table1.pk <http://table1.pk/>,  table1.col
>     FROM table1
>     WHERE table1.pk <http://table1.pk/> IN ( SELECT table2.pk 
> <http://table2.pk/> FROM table2 )
>     ) AS s
> WHERE s.col = ?
> 
> Is there any HINT that can optimize query?

Reply via email to