On 24 Dec 2010, at 8:17am, Vander Clock Stephane wrote:

> I have a key like this
> 
> 123-098-230-120-111 where (123), (098), (230), (120), (111) are what i 
> call node
> Node are integer comprise between 0 and 255 (bytes)

You mean from 000 to 254.  255 breaks your system because you are using modulus 
255.

> and i need to found "similare" key.
> A similar key is a key where one node is max + - 10 more or lower than 
> another node
> 
> so
> 
> 123-098-230-120-111
> is similare to
> 120-097-235-118-110
> 
> but not similare to
> 180-197-215-018-010
> 
> it's for our graphical software

Precalculate five sets of minimum and maximum bounds:

min11 = max((<#randomnumber>  % 255)-10,0)
max11 = min((<#randomnumber>  % 255)+10,255)

Then you can just seize the ten values you need from the table and use them to 
make up your SELECT command.

Select
  H1.ID
from
  HASH1 H1
where
  x1_y1 BETWEEN min11 AND max11 AND
  x1_y2 BETWEEN min12 AND max12 AND
  x1_y3 BETWEEN min13 AND max13 AND
  x1_y4 BETWEEN min14 AND max14 AND
  x1_y5 BETWEEN min15 AND max15;

This will be faster than trying to get SQLite to do the calculations for every 
row of your 50 000 000 row table.

It will work much faster with an index on x1_y1.
It may or may not work faster with an index on (x1_y1,x1_y2,x1_y3,x1_y4,x1_y5). 
 Try it.

Simon.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to