On 9/29/18, Stephen F. Booth <[email protected]> wrote:
> A query that ran fine under SQLite 3.24 is substantially slower in 3.25:

Thanks for the data sent off-list....

Your work-around is to add a plus sign "+" before the "a.id" in the
GROUP BY clause.  (And, BTW, shouldn't that really be an ORDER BY
clause instead of a GROUP BY?)

select a.id from a join c on a.id = case when c.b_a_name is not null then
c.b_a_id else c.a_id end where a.id in (select a_fts.rowid from a_fts where
a_fts match 'r*' order by rank) group by +a.id;

The change is the single "+" near the end.  This should be work for
you on all releases.

This is an interesting query planner problem.  Recall that a query
planner is really a kind of AI that has to infer or guess the best
query algorithm based on incomplete information.  In this particular
case, the AI is making a bad choice.  It will take some time for us to
figure out why and perhaps come up with an improvement.

Even in prior releases (such as 3.24.0) the AI was very very close to
making a bad choice.  A single minor tweak in one of the weights
pushed the decision threshold over a limit and caused that bad choice
to be taken.  So the problem has been lurking just under the surface
for a long time, apparently.  The minor tweak in 3.25.0
(https://sqlite.org/src/info/85b9be) merely brought the problem to the
surface.

-- 
D. Richard Hipp
[email protected]
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to