Hi,

I created the following table in sqlite 3.8.6

"CREATE TABLE IF NOT EXISTS test
(
a  INTEGER,
b  INTEGER,
c INTEGER,
d  BLOB,
PRIMARY KEY (a, b DESC)
);"

When I execute the following query

"SELECT * FROM test WHERE b < ? AND c > ?;"

A full table scan is executed because column a is not part of the query.

But when I step over the rows they are not returned in primary key sort order. 
Why is this?

If I look at the images at the query planning document 
(https://www.sqlite.org/queryplanner.html) I get the idea that the primary key 
B-tree should be used to traverse the table when a full table scan is executed. 
And since the 'DESC' keyword is used on column b in the primary key, I would 
expect that, as the rowId increases, the values retuned for column b would 
decrease. But this is not the case.

Does a full table scan then ignore the PK B-tree? Does it perhaps scan all 
table pages in the order in which they appear in the file system? I guess this 
would make sense to increase traversal speed, since it needs to check all pages 
anyway?

If I explicitly order using an 'ORDER BY' statement then - looking at the query 
plan - sqlite seems to perform a full table scan and store the result in a 
temporary table which is then sorted. I'd like to avoid the memory consumption 
produced by this query plan...

Any help or information would be appreciated!
Thanks in advance!

Jan Asselman







iba AG: Supervisory Board: Horst Anhaus, chairman; Management Board: Dr. Ulrich 
Lettau CEO,  Marta Anhaus, Harald Opel; Registered Office: Fuerth/Germany; 
Registration Office: Fuerth, HRB 9865, Vat.Reg.No DE 132760166, WEEE-Reg.No. 
DE11469996

This message is intended only for the named recipient and may contain 
confidential or privileged information. Taking notice of this message by third 
parties is not permitted. If you have received it in error, please advise the 
sender by return e-mail and delete this message and any attachments. Any 
unauthorized use or dissemination of this information is strictly prohibited.

Reply via email to