# Secondary indexes
On top of the key value store immudb provides secondary indexes to help developers to handle complex queries.
# Sorted sets
sorted set data type provides simplest secondary index you can create with immudb. That's a data structure that represents a set of elements ordered by the score of each element, which is a floating point number.
The score type is a float64 to accommodate the maximum number of uses cases.
64-bit floating point gives a lot of flexibility and dynamic range, at the expense of having only 53-bits of integer.
When an integer64 is cast to a float there could be a loss of precision, but the insertion order is guaranteed by the internal database index that is appended to the internal index key.
ZAdd can reference an item by
key or by
ZScan accepts following arguments:
Set: the name of the collection
SeekKey: initial key for the first entry in the iteration. Optional
SeekScore: the min or max score for the first entry in the iteration, depending on Desc value. Optional
SeekAtTx: the tx id for the first entry in the iteration. Optional
InclusiveSeek: the element resulting from the combination of the
SeekAtTxis returned with the result. Optional
Desc: DESC or ASC sorting order. Optional
SinceTx: immudb will wait that the transaction provided by SinceTx be processed. Optional
NoWait: when true scan doesn't wait that txSinceTx is processed. Optional
MinScore: minimum score filter. Optional
MaxScore: maximum score filter. Optional
Limit: maximum number of returned items. Optional
Having the possibility to get data specifying a transaction id:
AtTx, it’s the optimal way to retrieve the data, as it can be done with random access to it. And it can be made immediately after the transaction was committed or at any point in the future. When the transaction ID is unknown by the application and the query is made by key or key prefixes, it will be served through the index, depending on the insertion rate, it can be delayed or up to date with inserted data, using a big number in
NoWaitin true will mean that the query will be resolved by looking at the most recent indexed data, but if your query needs to be resolved after some transactions has been inserted, you can set
SinceTxto specify up to which transaction the index has to be made for resolving it.