Run an ANALYZE statement on your database and your 
queries will be fast once again.

Perhaps SQLite should fall back to the old non-optimized 
join behavior when the sqlite_stat1 table is missing.
This would cover 99% of the pre-SQLite3.2.3 legacy databases 
out there where the queries have already been hand-tuned.

--- Steve Green <[EMAIL PROTECTED]> wrote:

> Hi,
> 
> I currently have a v3.2.0 database that contains two tables that I regularly
> query with a join, e.g.,
> 
> select    t1.a, t1.b, t2.c, t2.d
> from      t1
> join      t2
> on        t1.x = t2.x and t1.a >= 100 and t1.a < 200
> group by  t1.a, t1.b, t2.c, t2.d
> 
> Table t1 has an index on a
> Table t2 has an index on x
> 
> I've created a new v3.3.4 database with the same schema and data.  Table t1 
> has
> about 150 million rows and t2 has about 3000 rows.  When I run the query using
> v3.2.0, it returns in about 0.1 seconds.  When run using v3.3.4, it takes 
> about
> 20 seconds.  For completeness, I ran the same query using v3.2.8, v3.3.2, and
> v3.3.3.  v3.2.8 performed the same (roughly) as v3.2.0; v3.3.2 and v3.3.3 
> performed
> the same as v3.3.4 (so, it appears that the change was made going into 
> v3.3.x).
> 
> When I ran an explain on the query in both databases, the main difference I
> noticed was in the opening of the database tables; in v3.2.0, it appears that
> the indices of both tables are being used...
> 
> addr  opcode          p1          p2          p3
> ----  --------------  ----------  ----------  
> ---------------------------------
> <snip>
> 37    OpenRead        1           4
> 38    SetNumColumns   1           7
> 39    Integer         0           0
> 40    OpenRead        3           6           keyinfo(1,BINARY)
> 41    Integer         2           0
> 42    OpenRead        0           2
> 43    SetNumColumns   0           8
> 44    Integer         2           0
> 45    OpenRead        4           3           keyinfo(1,BINARY)
> 46    Integer         3795633     0
> <snip>
> 
> In v3.3.4, it appears that the index of only one of the tables is being 
> used...
> 
> addr  opcode          p1          p2          p3
> ----  --------------  ----------  ----------  
> ---------------------------------
> <snip>
> 37    OpenRead        0           2
> 38    SetNumColumns   0           3
> 39    Integer         0           0
> 40    OpenRead        1           4
> 41    SetNumColumns   1           7
> 42    Integer         0           0
> 43    OpenRead        3           6           keyinfo(1,BINARY)
> 44    Rewind          0           78
> 45    Integer         3795633     0
> <snip>
> 
> It's quite possible that I'm misinterpreting the explain data as I'm fairly 
> new
> with it... However, it seems to me that this might explain the huge difference
> in performance.
> 
> Has anyone else seen this type of performance difference between v3.2.x and 
> v3.3.x?
> Any ideas on how we can improve the performance using v3.3.x (we'd really 
> like to
> use the most current version of the database, but the performance difference 
> would
> be a killer)?
> 
> Thanks,
> 
> Steve



__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Reply via email to