On Thu, Nov 24, 2011 at 05:22:38PM +0000, Simon Slavin scratched on the wall:
> On 24 Nov 2011, at 5:10pm, Jay A. Kreibich wrote:
> > On Thu, Nov 24, 2011 at 08:08:12AM +0000, Simon Slavin scratched on the 
> > wall:
> > 
> >> It is faster to search integers than it is to search real numbers. 
> > 
> >  Why?  Both types are a string of 64 bits.  Both types use the same
> >  integer-based logic for the =, <, and > operations.
> > 
> >  The only real difference is that integers are stored in a compressed
> >  format.  While that means they have a higher CPU cost to decode, the
> >  smaller size likely makes up for the encoding overhead with improved
> >  I/O times.  I'm not sure there is a strong practical win, however--
> >  especially if the data is in cache, or doesn't span several pages.
> 
> Hmm.  I really should check this out with SQLite.  It is generally
> true in computing. 

  FP mathematics instructions (such as + - * / )  typically take many
  more CPU cycles to complete than their integer equivalents.

  However, when it comes to comparisons (such as = < <= >= > ) you
  might use in an index scan, the IEEE 754 standard is specifically 
  designed so that these operations can be done with the exact same
  logic as unsigned integer numbers.  In most CPUs the floating-point
  pipeline has its own logic units to perform these operations (due
  to the separation of integer and FP registers), but the speed of these
  logic units should be the same as the primary integer units.

> It may not be true given how SQLite uses different
> numbers of bytes to store different sized integers.

  Yes-- the variable length integers means there are extra decoding
  steps for the integers.  However, the variable length also means one
  can, in theory, stuff more "typical" integer values into the same
  database page, saving on I/O.  If the I/O is from disk, this reduced
  I/O cost, as small as it is likely to be, is still likely to save
  significantly more than the integer decoding costs.  I/O is just that
  expensive next to processor cycles.  That's my guess, anyways.  I'm
  not sure things would be so clear if you were working out of the
  OS file system cache.

  Overall, you might be right... But if there is a difference, it
  is likely related to the variable length nature of integers, not
  something inherent in FP math being more expensive than integer math.

    -j

-- 
Jay A. Kreibich < J A Y  @  K R E I B I.C H >

"Intelligence is like underwear: it is important that you have it,
 but showing it to the wrong people has the tendency to make them
 feel uncomfortable." -- Angela Johnson
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to