I have a table whose columns are varchar(50) and a float. I need to (very quickly) look get the float associated with a given string. Even with indexing, this is rather slow.
I know, however, that each string is associated with an integer, which I know at the time of lookup, so that each string maps to a unique integer, but each integer does not map to a unique string. One might think of it as a tree structure.
Is there anything to be gained by adding this integer to the table, indexing on it, and using a query like:
SELECT floatval FROM mytable WHERE phrase=givenstring AND assoc=givenint
This is Postgres, and if you could not tell, I have very little experience with databases.
Keys on
VARCHARcolumns can be very long which results in less records per page and more depth (more levels in theB-Tree). Longer indexes also increase the cache miss ratio.How many strings in average map to each integer?
If there are relatively few, you can create an index only on integer column and
PostgreSQLwill do the fine filtering on records:You can also consider creating the index on the string hashes:
Each hash is only
16bytes long, so the index keys will be much shorter while still preserving the selectiveness almost perfectly.