Hi,

I understand. However, I'm afraid I will not have time to work on this
issues. I think those uses cases are not that common. Patches or ideas on
how to fix this are welcome!

Regards,
Thomas



On Sunday, May 3, 2015, Vitali <[email protected]> wrote:

> I would add also my case here.
>
> Seems a query like
>
> SELECT * FROM SOMETABLE WHERE SOMETABLE_ID IN (SELECT   ID FROM
> SOMEFUNCTION( .. static input parameters.. ))
>
> also is not scalable very well.  SOMETABLE_ID  is a primary key with an
> index. SOMEFUNCTION is a deterministic  function returning ResultSet,
> parameters are static
> Let's say main table contains 80000 records,  SOMEFUNCTION  returns 3000
> IDs.
>
> The query above works 4 seconds.
> If I rewrite it as
>
>
> SELECT * FROM SOMETABLE INNER JOIN (SELECT   ID FROM SOMEFUNCTION( ..
> static input parameters.. ))  ids ON ids.ID = SOMETABLE_ID
>
> then it works 10ms.
>
> More items are  in set  - performance drops exponentially.
>
> I think this case is much more widespread than the case that Quentine
> reported :)
>
> A variant of the case is a prepared statement query like:
> SELECT * FROM SOMETABLE WHERE SOMETABLE_ID IN (SELECT   ID FROM TABLE(ID
> INT=?))
> when   Set<Integer> , for example,  is passed to a prepared statement and
> time complexity should be O(n) iterating  over IDs (that even passed a Java
> collection) and primary key index is asked to retrieve a record.
>
> Inner join also helps:
> SELECT * FROM SOMETABLE INNER JOIN (SELECT   ID FROM TABLE(ID INT=?)) ids
> ON ids.ID = SOMETABLE_ID
>
> There is no problem to use inner joins, but for applications generating
> SQL dynamically an approach with   SOMETABLE_ID IN (...) is preferable.
> Imagine UPDATE, DELETE queries where  joins are not possible directly e.g.
>
> Vitali
>
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected]
> <javascript:_e(%7B%7D,'cvml','h2-database%[email protected]');>
> .
> To post to this group, send email to [email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>.
> Visit this group at http://groups.google.com/group/h2-database.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.

Reply via email to