将 `ordered_set` 用于 `select` 语句与 `>` 和 `<=` 以降低时间复杂性是不是有意义

Posted

技术标签:

【中文标题】将 `ordered_set` 用于 `select` 语句与 `>` 和 `<=` 以降低时间复杂性是不是有意义【英文标题】:Does it make sense to use `ordered_set` for `select` statement with `>` and `<=` for lowering time compexity将 `ordered_set` 用于 `select` 语句与 `>` 和 `<=` 以降低时间复杂性是否有意义 【发布时间】:2017-08-26 22:30:04 【问题描述】:

我使用ordered_set类型的ETS表,行看起来像integer_value, string(基本上它没有值,只有键)。

当我执行ets:select(tab, [match_spec]) 时,match_spec 所做的是选择所有行,其中integer_value 满足大于和小于理解。

我想知道,我是否受益,而不是扫描整个表,而是在对数时间内找到下限和上限,然后获取介于两者之间的所有元素,就像我从 SQL 表中所期望的那样,或者这样的功能在 ETS 中没有实现,并且使用ordered_set 代替普通的set 没有什么特别的好处吗?

【问题讨论】:

【参考方案1】:

简单的方法是使用 timer:tc/3 函数来获取函数或 ets 模块函数的执行时间。 您可以使用 fprofeprof 来分析您的代码,以了解调用了什么函数以及执行它需要多少时间。 这可以帮助你。 如果您不熟悉 erlang 分析器,我可以展示带有分析器的 ets setordered_set 的简单示例。

【讨论】:

我已经发现(在 2011 年最后更新的主题中 :))ets 无论如何都会扫描整个表,无论它是否已排序。但是努力获取信息和链接的“新鲜度”让我担心今天的 erlang 社区和 erlang 本身有多么活跃

以上是关于将 `ordered_set` 用于 `select` 语句与 `>` 和 `<=` 以降低时间复杂性是不是有意义的主要内容,如果未能解决你的问题,请参考以下文章

某些 ETS 表类型之间有啥区别?

MySQL - 如何将子查询中的列别名用于另一个子查询?

ets

删除数据-SQL

mariad(selec的使用)

checkbox选中selec才可选和显示隐藏密码