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

Sorting in tarantool with min() if several records have equal secondary index

  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 如何排序记录?我通过主索引测试并看起来像。这种行为是否标准化?

Tarantool 有几种类型的索引 [1]。有些是排序的,有些是未排序的。例如,树索引 [2] 将被排序,这意味着您可以获得边界,而哈希索引 [3] 未排序,意味着您无需复制和排序即可获得边界。

在你的例子中,你使用了树索引。因此,您可以为 'price' 索引使用最小值、最大值、边界选择等。

更新(在通过电子邮件进行了一些讨论之后)

Tarantool returns first 按主键的元组 min() 如果多个记录具有相同的二级索引和 last 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