On 10/15/17, korablev <kitn...@gmail.com> wrote:
> Thanks, I really appreciate so fast responce. However, example above still
> doesn't work: planner prefers index 'a' instead of TABLE SCAN for WITHOUT
> ROWID table, when range of query covers full table.

My input is this:

CREATE TABLE t1(a PRIMARY KEY, b, c) WITHOUT ROWID;
WITH RECURSIVE
    cnt(x) AS (VALUES(1000) UNION ALL SELECT x+1 FROM cnt WHERE x<2000)
INSERT INTO t1(a,b,c) SELECT x, x,x FROM cnt;
CREATE INDEX t1b ON t1(b);
ANALYZE;
EXPLAIN QUERY PLAN
SELECT * FROM t1 WHERE b BETWEEN 500 AND 2500;
EXPLAIN QUERY PLAN
SELECT * FROM t1 WHERE b BETWEEN 2900 AND 3000;

I get this output:

0|0|0|SCAN TABLE t1
0|0|0|SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)

Are you getting something different.  Are you saying the above is wrong?

-- 
D. Richard Hipp
d...@sqlite.org
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to