Hi,

First, think you for doing sqlite. I like it !

I am surprised by the result of "EXPLAIN QUERY PLAN" on some queries.

I will explain try to explain my issue.

1-Open the attached database
        This database contains a table "a":
                CREATE TABLE a(id INT,v REAL,r_a_id INT)
        This table "a" is pointing to an other table named "c" through the 
attribute "r_a_id":
                CREATE TABLE c(id INT,name)

        The view "v_c" is representing that table "c" with one more column 
"total" computed by a SELECT on "a":
                CREATE VIEW v_c AS SELECT *, (SELECT TOTAL(a.v) FROM a WHERE 
a.r_a_id=c.id ) AS total FROM c
                

2-EXPLAIN QUERY PLAN SELECT id FROM v_c
returns:
        SCAN TABLE c (~74 rows)

This is correct

3-EXPLAIN QUERY PLAN SELECT id FROM v_c
returns:
        SCAN TABLE c (~74 rows)
        EXECUTE CORRELATED SCALAR SUBQUERY 1
        SEARCH TABLE a USING INDEX a_r_a_id (r_a_id=?) (~88 rows)

This is correct too because we have to compute the "total" column

4-EXPLAIN QUERY PLAN SELECT total, total+1, total+2 FROM v_c
returns:
        SCAN TABLE c (~74 rows)
        EXECUTE CORRELATED SCALAR SUBQUERY 1
        SEARCH TABLE a USING INDEX a_r_a_id (r_a_id=?) (~88 rows)
        EXECUTE CORRELATED SCALAR SUBQUERY 2
        SEARCH TABLE a USING INDEX a_r_a_id (r_a_id=?) (~88 rows)
        EXECUTE CORRELATED SCALAR SUBQUERY 3
        SEARCH TABLE a USING INDEX a_r_a_id (r_a_id=?) (~88 rows)

For me this is not optimized (but I am not a db specialist) because the 
computation of "total" is done 3 times instead of only one.

What do you think about that ?
Is it a bug in the plan of execution or is it normal ?
Do you know I can optimize my view to have only one "CORRELATED SCALAR" ?

I tried "EXPLAIN QUERY PLAN SELECT total, total+1, total+2 FROM (select total 
from v_c)" but I have the same result.

In advance, thank you for your help and your very good tool !

Regards,
Stéphane MANKOWSKI
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to