Erlang:如何分析qlc:q是执行全表扫描,键前缀扫描还是键查找?

try*_*try 9 erlang profiling

如何分析qlc:q是执行全表扫描,键前缀扫描还是键查找?

例如,使用{{KeyPrefix,KeySuffix},Value}等条目设置的类型的ets将会

qlc:q([
    {{KeyPrefix, KeySuffix}, Value} ||
    {{KeyPrefix, KeySuffix}, Value} <- ets:table(Table),
    KeyPrefix =:= Something
])
Run Code Online (Sandbox Code Playgroud)

进行全表扫描或键前缀扫描?

Tim*_*Tim 0

ETS 不是在 Erlang 中实现的,它是在运行时系统中实现的(大概是在 C 中?)。因此,我认为今天不可能做到这一点。即使您找到了一种方法,当您升级到新版本的 Erlang 时,您的方法也可能会崩溃。可靠的方法需要运行时系统向 ETS 内部公开某种内省 API,我认为只要它没有在 Erlang 中实现,这种情况就不太可能发生。当然,您可以深入研究代码以更好地了解给定场景中可能发生的情况,但我怀疑您最好将时间花在应用程序代码上。