mnesia - 在 table 创建后在字段上创建索引

mnesia - creating index on a field after the table is created

我使用

创建了一个table
mafiapp_friends = [aaa, expertise, xxx, yyy]

注意expertise在记录

中的位置2
mnesia:create_table(mafiapp_friends,
[{attributes, record_info(fields, mafiapp_friends)},
{disc_copies, Nodes}]).

我忘了在里面加索引语句

{index, [#mafiapp_friends.expertise]},

现在我需要创建这个索引。但是我不想删除 table 并重新创建 table,因为我在其中有数据。

我执行了以下语句:

mnesia:add_table_index(mafiapp_friends, expertise)

然后我做了

mnesia:schema(mafiapp_friends).

在我看到的输出中,

index -> [3]

{index,3} -> {mafiapp_friends,index,3}

你能告诉我这里的 [3] 是什么意思吗?

因此,3 是索引字段在 table 中的位置,即

#mafiapp_friends.expertise

看例子:

2> rd(mafiapp_friends, {aaa, expertise, xxx, yyy}).
mafiapp_friends
3> #mafiapp_friends.expertise.
3
4> record_info(fields, mafiapp_friends).
[aaa,expertise,xxx,yyy]
5> 

注意 erlang 中的记录只是第一个元素是记录名称的元组,这就是为什么索引乍一看有点奇怪

5> X = #mafiapp_friends{expertise = hello}.
#mafiapp_friends{aaa = undefined,expertise = hello,
                 xxx = undefined,yyy = undefined}
6> element(3, X).
hello
7>