On 17 Jul 2011, at 2:40pm, dcharno wrote:

> I have a table where columns a and b form a unique key for column c.  In 
> an attempt to speed up queries I added an index on a and b.
> 
>   CREATE TABLE t(a TEXT, b TEXT, c TEXT, CONSTRAINT u UNIQUE(a,b));
>   CREATE INDEX iab ON t(a, b);
> 
> But, an automatic index is being used even though it seems like the 
> index terms should be usable according to the optimizer overview:
> 
>   sqlite> EXPLAIN QUERY PLAN SELECT * FROM t WHERE a="foo" AND b="bar";
>   0|0|0|SEARCH TABLE t USING INDEX sqlite_autoindex_t_1 (a=? AND b=?) 
> (~1 rows)

The CONSTRAINT you defined on the TABLE requires SQLite to make up its own 
index.  Because without that index it would have to scan every row of the table 
whenever you INSERTed a new row to see if there was a clash.

Since SQLite already has an idea index for your query it never get as far as 
noticing that you made another one yourself.

Simon.
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to