2011-04-12 115 views

回答

0

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

+1

这个问题不是特定于ETS,我不这么认为。他可以预见在mnesia表或Erlang元组列表上实现相同的QLC,同样的问题仍然适用。 – 2011-05-09 20:38:28

0

根据我们的经验,有时一个qlc eval(通过列表理解)非常聪明,有时非常愚蠢。也就是说,我认为你的问题是有效的。

我知道没有办法做到你想要的东西,但你可能能够通过其他方式获得这些信息。您当然可以查看qlc模块的源代码,以了解您是否可以从中获得任何见解。此外,您可以在qlc函数中插入一些调试语句,并重新编译您的Erlang运行时以获得更多反馈。

好运
-tjw

1

你可以得到很多信息的有关使用qlc:info/1您的QLC表达。这可能不会帮助您确定给定的子查询是使用全表扫描还是使用全表扫描,但它确实会返回查询计划和与查询相关的表,然后您可以将它们传递到ets:info/1以检索它们的类型和keypos。