On Thursday 11 June 2009 11:50:56 Simon Slavin wrote:
> On 11 Jun 2009, at 8:24am, Antti Nietosvaara wrote:
> > CREATE TEMPORARY VIEW T_view AS SELECT * FROM T WHERE (C=1 OR C=2);
> > where (C=1 OR C=2) will reflect the permissions of the user.
> >
> > There is also an index for C:
> > CREATE INDEX idx_C ON T(C);
> >
> > I have a problem with performance when using the view for simple
> > selects.
> > The following query returns the result immediately:
> > SELECT min(C) from T;
> >
> > However the same query on the view takes a very long time:
> > SELECT min(C) from T_view;
>
> You didn't create an index on T_view ?

No, it seems you cannot create an index on views. Trying to do so resulted: 
"SQL error: views may not be indexed"

I just noticed that if there I use only one C filter, for example:
CREATE TEMPORARY VIEW T_view AS SELECT * FROM T WHERE C=1;
the queries will be just as fast as with using T directly. Also, explain query 
plan returns the string ending with ORDER BY, just like it does when selecting 
from T.
With this single filter my query took about 8 ms. With two filters (C=1 OR C=2) 
the time went to over 6 seconds. With (C=1 OR C=2 OR C=3) about 13 seconds.

-- 
Antti Nietosvaara

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to