Hello,
I am exploring MonetDB queries performance that are generated based on user parameters/preferences.
To be more specific the where clause is generated based on a user interface mapping user input parameters straight into SQL statements.
See below one example of this transformation.
FIELD contains PATTERN (case sensitive/insensitive)
is transformed into
select ... from TABLE where
(case when (user_case_sensitive_pref=1) then ("FIELD" like '%PATTERN%')
else
("FIELD" ilike '%PATTERN%')
end);
Performance of this in comparison with query generated from within the code:
char * query;
if (
user_case_sensitive_pref
)
query
= "select ... from TABLE where \"FIELD\" like '%PATTERN%'";
else
query
= "select ... from TABLE where \"FIELD\" ilike '%PATTERN%'";
query_execute(
query);
is huge (second approach takes 0.12 sec, vs 6 sec for first one).
But it requires a far more complex implementation.
First I thought this has to do with user variables but even if the statement is
select ... from TABLE where
(case when TRUE then ("FIELD" like '%PATTERN%')
else
("FIELD" ilike '%PATTERN%')
end);
timing is similarly slow.
This narrows down to "case" performance issue, as far as I can see.
Am I wrong?
Thank you,
Dan