Erlang:如何配置qlc:q是进行全表扫描,键前缀扫描还是键查找?

| 如何分析qlc:q是否进行全表扫描,键前缀扫描或键查找? 例如,使用{{KeyPrefix,KeySuffix},Value}等条目设置类型的ets-
qlc:q([
    {{KeyPrefix, KeySuffix}, Value} ||
    {{KeyPrefix, KeySuffix}, Value} <- ets:table(Table),
    KeyPrefix =:= Something
])
全表扫描还是键前缀扫描?     
已邀请:
您可以使用qlc:info / 1获得有关QLC表达式的许多信息。这可能无法帮助您确定给定的子查询是使用全表扫描还是进行全表扫描,但这确实可以使您返回查询计划和与查询相关的表,然后可以将这些表传递给ets:info / 1来检索其类型和键盘     
ETS不在Erlang中实现,而是在运行时系统中实现(大概是在C语言中)。因此,我认为今天不可能做到这一点。即使您想出一种方法,升级到新版本的Erlang时,方法也会中断。一种可靠的方法将要求运行时系统向ETS的内部公开某种自省的API,并且我认为只要未在Erlang中实现,就不太可能发生。当然,您可以深入研究代码以更好地了解给定场景中可能发生的情况,但是我怀疑您最好将时间花在专注于应用程序代码上。     
根据我们的经验,有时
qlc
评估(通过列表理解)非常聪明,有时却很愚蠢。也就是说,我认为您的问题是正确的。 我不知道确切地做您想做的事,但是您也许可以通过其他方式获得此信息。您当然可以查看
qlc
模块的源代码,以查看是否可以从中获得任何启示。此外,您可以在ѭ1函数中插入一些调试语句,然后重新编译Erlang运行时以获得更多反馈。 祝好运 -tjw     

要回复问题请先登录注册