It seems to me that you may want to consider defining your table as a virtual R* tree based table.
See http://www.sqlite.org/rtree.html On Wed, 2010-12-08 at 19:56 +0300, Vander Clock Stephane wrote: > Hello, > > on the table : > > CREATE TABLE HASH( > ID INTEGER PRIMARY KEY ASC, > x1_y1 INTEGER, > x1_y2 INTEGER, > x1_y3 INTEGER, > x1_y4 INTEGER, > x1_y5 INTEGER, > x2_y1 INTEGER, > x2_y2 INTEGER, > x2_y3 INTEGER, > x2_y4 INTEGER, > x2_y5 INTEGER, > x3_y1 INTEGER, > x3_y2 INTEGER, > x3_y3 INTEGER, > x3_y4 INTEGER, > x3_y5 INTEGER, > x4_y1 INTEGER, > x4_y2 INTEGER, > x4_y3 INTEGER, > x4_y4 INTEGER, > x4_y5 INTEGER, > x5_y1 INTEGER, > x5_y2 INTEGER, > x5_y3 INTEGER, > x5_y4 INTEGER, > x5_y5 INTEGER > ); > CREATE INDEX HASH_X1_Y1_IDX ON HASH (X1_Y1); > CREATE INDEX HASH_X2_Y2_IDX ON HASH (X2_Y2); > CREATE INDEX HASH_X3_Y3_IDX ON HASH (X3_Y3); > CREATE INDEX HASH_X4_Y4_IDX ON HASH (X4_Y4); > CREATE INDEX HASH_X5_Y5_IDX ON HASH (X5_Y5); > > > with millions of rows, how to optimize such query : > > Select > ID > from > HASH > where > x1_y1 >= <#randomnumber1> and > x1_y1 <= <#randomnumber1>+ 20 and > x1_y2 >= <#randomnumber4> and > x1_y2 <= <#randomnumber4> + 20 and > x1_y3 >= <#randomnumber7> and > x1_y3 <= <#randomnumber7> + 20 and > x1_y4 >= <#randomnumber10> and > x1_y4 <= <#randomnumber10> + 20 and > x1_y5 >= <#randomnumber13> and > x1_y5 <= <#randomnumber13> + 20 and > x2_y1 >= <#randomnumber16> and > x2_y1 <= <#randomnumber16> + 20 and > x2_y2 >= <#randomnumber19> and > x2_y2 <= <#randomnumber19> + 20 and > x2_y3 >= <#randomnumber22> and > x2_y3 <= <#randomnumber22> + 20 and > x2_y4 >= <#randomnumber25> and > x2_y4 <= <#randomnumber25> + 20 and > x2_y5 >= <#randomnumber28> and > x2_y5 <= <#randomnumber28> + 20 and > x3_y1 >= <#randomnumber31> and > x3_y1 <= <#randomnumber31> + 20 and > x3_y2 >= <#randomnumber34> and > x3_y2 <= <#randomnumber34> + 20 and > x3_y3 >= <#randomnumber37> and > x3_y3 <= <#randomnumber37> + 20 and > x3_y4 >= <#randomnumber40> and > x3_y4 <= <#randomnumber40> + 20 and > x3_y5 >= <#randomnumber43> and > x3_y5 <= <#randomnumber43> + 20 and > x4_y1 >= <#randomnumber46> and > x4_y1 <= <#randomnumber46> + 20 and > x4_y2 >= <#randomnumber49> and > x4_y2 <= <#randomnumber49> + 20 and > x4_y3 >= <#randomnumber52> and > x4_y3 <= <#randomnumber52> + 20 and > x4_y4 >= <#randomnumber55> and > x4_y4 <= <#randomnumber55> + 20 and > x4_y5 >= <#randomnumber58> and > x4_y5 <= <#randomnumber58> + 20 and > x5_y1 >= <#randomnumber61> and > x5_y1 <= <#randomnumber61> + 20 and > x5_y2 >= <#randomnumber64> and > x5_y2 <= <#randomnumber64> + 20 and > x5_y3 >= <#randomnumber67> and > x5_y3 <= <#randomnumber67> + 20 and > x5_y4 >= <#randomnumber70> and > x5_y4 <= <#randomnumber70> + 20 and > x5_y5 >= <#randomnumber73> and > x5_y5 <= <#randomnumber73> + 20; > > because they takes very very lot of time (hourS) to return :( > on other SGBD (like Firebird) with same amount of data > they return immediatly ... > > Thanks by advance > stéphane > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users