如果多个记录具有相等的二级索引,则使用min()在tarantool中进行排序

时间:2018-03-12 10:28:50

标签: tarantool

  local orders = box.schema.space.create('orders')
  box.schema.sequence.create('orderId')
  orders:create_index('id', {sequence='orderId'})
  orders:create_index('price', {unique=false, parts={2, 'integer'}})

  local bestOrder = orders.index.price:min()

我在二级索引上使用min()函数搜索最佳订单(最低价格)。如果Tarantool具有相同的价格(二级索引),它们如何对记录进行排序?我测试并看起来像主索引。这种行为是否标准化了?

1 个答案:

答案 0 :(得分:1)

Tarantool有几种类型的索引[1]。有些是排序的一些没有排序。例如,树索引[2]将被排序,这意味着你可以获得边界,并且哈希索引[3]没有排序,意味着你可以获得没有复制和排序的边界。

在您的情况下,您使用树索引。所以你可以使用最小值,最大值,界限选择等来获得“价格”指数。

更新(通过电子邮件进行了一些会谈后)

如果多个记录具有相同的二级索引且最后一个 min(),则Tarantool会按max()的主键返回第一个元组。

这种行为对于Tarantool来说是正常的,你可以指望它在不久的将来不会改变。

[1] https://tarantool.org/en/doc/2.0/book/box/box_index.html?highlight=index#module-box.index

[2] https://en.wikipedia.org/wiki/B-tree

[3] https://en.wikipedia.org/wiki/Hash_table