Hi,

I have the following schema:

CREATE TABLE a (id INT, partName TEXT, content BLOB, PRIMARY KEY(id, partName));
CREATE TABLE b (id, partName, content);
CREATE VIEW aView AS SELECT a.id, a.partName, COALESCE(a.content,
(SELECT b.content FROM b WHERE b.id=a.id AND b.partName=a.partName))
FROM a;
CREATE INDEX bIndex ON b (id, partName);

and the following query has a query plan that uses bIndex:

EXPLAIN QUERY PLAN SELECT b.content FROM b WHERE b.id=? AND b.partName=?
0|0|0|SEARCH TABLE b USING INDEX bIndex (id=? AND partName=?) (~9 rows)

However the subquery in the view yields a different query plan:

EXPLAIN QUERY PLAN SELECT * FROM aView WHERE id=? AND partName=?;
0|0|0|SEARCH TABLE a USING INDEX sqlite_autoindex_a_1 (id=? AND
partName=?) (~1 rows)
0|0|0|EXECUTE CORRELATED SCALAR SUBQUERY 1
1|0|0|SCAN TABLE b (~10000 rows)

Is there a reason why the index is not used in the subquery?

Best regards,
Filip Navara
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to