I think without your actual schema and query plan it might be hard to tell,
but generally the optimizer is not a panacea, it's limited in what it can
divine from your queries.

On Tue, Jun 9, 2015 at 10:52 AM, giles burgess <gilesjb at gmail.com> wrote:

> Hi, I have a question about the SQLite query optimizer.
>
> I have a SQLite embedded database with a star-like schema, with the wrinkle
> that each record in the fact table can map to a range of records in each
> dimension table. This is represented in the fact table as min and max
> rowids for each dimension.
>
> This is not a particularly friendly physical schema to query directly, so I
> have a view that dereferences the rowid foreign keys and also expands the
> dimension ranges into separate rows. The multiplication factor for all
> dimensions can get quite large, with a single physical fact record mapping
> to thousands of records in the view.
>
> Looking at the query plan, it appears that a select * on this view gets
> executed as nested scans over all the dimension tables.
>
> Obviously this isn't very fast, but I would expect that if I perform a
> projection on this view that contains only a subset of the dimension field
> values, eg:
>
>     select distinct dimension1_value from friendly_view;
>
> the query optimizer ought to be able to avoid the joins with the tables for
> dimension2, dimension3 etc since they don't contribute to the result. But
> according to the planner it's scanning over all dimension tables
> regardless.
>
> Is this expected? Is there some way to define the view so that the
> optimizer can avoid these redundant joins? Or do I need to always
> explicitly limit the joins to only the tables that are needed?
>
>
> Thanks,
>
> Giles Burgess
> _______________________________________________
> sqlite-users mailing list
> sqlite-users at mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>

Reply via email to