Playing with optimization of my queries, I stuck on very strange (for me) 
behaviour of 
sqlite. 

The query is pretty complex, but for the experiment I simplified it to:

select a, b from t order by a desc, b desc;

The result of "explain query plan" is as expected:

SCAN TABLE T
USE TEMP B-TREE FOR ORDER BY

Then I created index:

create index i on T(a desc, b desc);

After creating index, the explain query plan looks like:

SCAN TABLE T USING COVERING INDEX i

The query speed raises significantly and I leaved it this way. The original 
more complex query also started to use the index and increased its speed 
significantly.

But after some time working in wild (executing the more complex original 
query), the performance decreased again and despite of existing the index, the 
result of the "explain query plan" is again:

SCAN TABLE T
USE TEMP B-TREE FOR ORDER BY

After dropping the index and recreating, everything repeats from the beginning 
- short period of high performance queries and then not using index again.

The database is not changed, at least for the tables used in the query. Only 
select statements are executed, by several connections.

What can be the reason for such strange behaviour?

-- 
http://fresh.flatassembler.net
http://asm32.info
John Found <johnfound at asm32.info>

Reply via email to