4

如何在恒定时间内(或最接近的时间)找到 Mnesia 表中索引列的最大值或最小值?

4

2 回答 2

5

我会在 Mnesia 数据库之外进行。每当有插入到表中时,通过一个学习这些值的过程来保持显式最小值和显式最大值。这使您可以非常快速地对值进行恒定时间查找。

如果您可以使用 O(lg n) 时间,那么您可以将表设为有序集。从那里开始,first/1应该last/1给你你想要的,因为密钥包含你订购的东西。但这通常也会将其他查询减慢到 O(lg n)。

第三个技巧是使用近似值。有时您会扫描表格并记下最大值和最小值。然后这会变成您想要的,但如果距离您上次扫描很长时间,则该值可能不是最新的。

于 2012-09-05T19:05:27.117 回答
1

好问题,但我认为这是不可能的。快速浏览一下 mnesia 和 qlc 文档并没有给我任何关于这个主题的线索。

在我看来,mnesia 中的辅助密钥设施不完整,因此功能非常有限。更不用说加载索引表时可怕的 mnesia 启动时间。

我认为在您的情况下最可靠的解决方案是进行显式索引。例如,在主键上创建并与表保持同步,主键实际上是您想要索引的值。

于 2012-09-04T19:01:59.687 回答