On 12/2/15, Bart Smissaert <bart.smissaert at gmail.com> wrote:
>> and the SQLite query planner sometimes notes that length when considering
> data shape
>
> In what situations does that happen?
>

CREATE TABLE ex1(a INTEGER, b VARCHAR(5), c VARCHAR(5000));
CREATE INDEX ex1b ON ex1(b);
CREATE INDEX ex1c ON ex1(c);

SELECT * FROM ex1 WHERE b=?1 AND c=?2;

The query planner is faced with the decision of whether to use the
ex1b or ex1c index.  Statistics gathered by ANALYZE would normally
break this tie, but suppose ANALYZE has not been run, or suppose both
indexes are equally selective.  In that case, SQLite would choose ex1b
since it guesses the keys would be shorter and will compare faster and
the fanout will be greater, and hence extb can be searched using fewer
CPU cycles.



-- 
D. Richard Hipp
drh at sqlite.org

Reply via email to