On 4/26/2023 11:03 AM, Silvio wrote:
> We have some heavy queries that involve selecting records from a base cached table A (~100K records) that satisfy a
> quite a number of conditions expressed as
>
>
A.PK [NOT] IN (...)
>
You could also express those as
A.PK NOT IN ( SubNotCondition1 UNION SubNotCondition2 ... )
AND
A.PK IN ( SubCondition1 UNION SubCondition2 ... )
which should result in less scanning of the second table.
>
> We are thinking of using a temporary memory table C that holds primary keys of table A, evaluating the subqueries on B
> seperately inserting or removing keys into table C as needed and finally having a single subquery
>
That might help, and I have done similar things (on other databases).
You probably want a session-local temporary table, and you probably want to do
CREATE IF NOT EXISTS TEMP1
TRUNCATE TEMP1
for each query, rather than creating and dropping it, because CREATE/DROP is quite expensive in H2.