I supposed your SQL command like this "select * from table where (DateTime>X AND DateTime<Y and CarPlate = Z ) " OR this "select * from table where (DateTime>X AND DateTime<Y and CarPlate Like 'AA00%')"
All these SQL can transform to " select * from table where (DateTime between D1 and D2 and CarPlate between C1 and C2)" Obviously, to speed up the query, you need a two-dimension r-tree index, one dimension for datetime , another for carplate, since carplates are text string, a little transformation is needed before insert it to rt-ree table ________________________________ ???: Michele Pradella<mailto:michele.pradella at selea.com> ????: ?2016/?2/?19 16:06 ???: sqlite-users at mailinglists.sqlite.org<mailto:sqlite-users at mailinglists.sqlite.org> ??: [sqlite] Multiple Column index Hi all, I have a question about using index with multiple column. Take this test case CREATE TABLE test (DateTime BIGINT,CarPlate VARCHAR(255)); CREATE INDEX indexA ON test(DateTime); CREATE INDEX indexB ON test(CarPlate); CREATE INDEX indexAB ON test(DateTime,CarPlate); now if you do [1] -> EXLPAIN QUERY PLAN SELECT * FROM test WHERE (DateTime=0) AND (CarPlate='AA000BB') you obtain: 0|0|0|SEARCH TABLE test USING COVERING INDEX indexAB (DateTime=? AND CarPlate=?) So it's good. if you do EXLPAIN QUERY PLAN SELECT * FROM test WHERE (DateTime>1)AND(DateTime<100) AND (CarPlate = 'AA000BB'); 0|0|0|SEARCH TABLE test USING INDEX indexB (CarPlate=?) So is used only the indexB not the index for DateTime, and if you force it indexAB 0|0|0|SEARCH TABLE test USING COVERING INDEX indexAB (DateTime>? AND DateTime<?) so it used only for DateTime. Do you think Is there a way to use indexAB (or using both index combining two select) to cover both condition (DateTime>X AND DateTime<Y and CarPlate = 'something' )? multicolumn index can be used only for [1] queries? _______________________________________________ sqlite-users mailing list sqlite-users at mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users