On Thursday, 30 August, 2012, at 02:03, Navaneeth.K.N wrote:

> When looking throgh the execution plan, they both uses different plans.
 
> Plan for 1st query
> --------------
> SEARCH TABLE patterns_content AS pc USING COVERING INDEX
> sqlite_autoindex_patterns_content_1 (pattern=?) (~2 rows)
> SCAN SUBQUERY 1 AS patterns (~2 rows)
> SEARCH TABLE words AS w USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
> USE TEMP B-TREE FOR ORDER BY
 
> Plan for 2nd query
> -------------
> SEARCH TABLE words USING INTEGER PRIMARY KEY (rowid=?) (~2 rows)
> EXECUTE LIST SUBQUERY 1
> SEARCH TABLE patterns_content AS pc USING COVERING INDEX
> sqlite_autoindex_patterns_content_1 (pattern=?) (~2 rows)
> USE TEMP B-TREE FOR ORDER BY
 
> First one uses a temporary table to store the subquery results. I am
> wondering which query to choose. Any help would be great!

Actually, both query plans are identical.  There is a very slight difference in 
the actual execution code, but not much.  In both cases the first step is to 
execute subquery 1.  Those results are then used to select the result rows 
which are then filtered and inserted into a temporary B-TREE so that they can 
be returned in the order you requested.  You should test both queries with 
actual data, but they ought to provide identical results and identical 
execution times.

> Also, is there way to get rid of temporary B-TREE for order by?

Only by removing the order by.

You are selecting candidates by rowid but the filtered results are to be 
returned in a different order.  This necessitates in-order traversal of the 
result-set.

Because you are limiting the size of the candidates to only 5 out of how ever 
many rows are in the words table, selection of those five rows by rowid will 
always be faster than any other index scan method, so the optimizer should 
never choose any alternate method.  For example if you created an index with 
(confidence desc, rowid, learned, word) then the result could be satisfied by 
an index scan.  However, scanning a million rows of an index will be much 
slower than selecting 5 rows directly and returning them through in-order 
traversal of a temporary b-tree.

 
> --
> Thanks
> Navaneeth

---
()  ascii ribbon campaign against html e-mail
/\  www.asciiribbon.org



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

Reply via email to