<div dir="ltr"><div class="gmail_quote"><div dir="ltr">As you'll hear from many people, denormalize. Mnesia isn't really made to be a RDMS.<div><div></div><div class="Wj3C7c"><br><br><div class="gmail_quote">On Tue, Sep 30, 2008 at 12:36 PM, Robert Raschke <span dir="ltr"><<a href="mailto:rtrlists@googlemail.com" target="_blank">rtrlists@googlemail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div>On Tue, Sep 30, 2008 at 4:49 PM,  <<a href="mailto:Dana.RUBINO@rbs.com" target="_blank">Dana.RUBINO@rbs.com</a>> wrote:<br>


> Hi all,<br>
><br>
> Changed subject of my last thread as it wasn't a performance issue!<br>
><br>
> I have done some more digging and found that Mnesia appears to support only joins across two tables.<br>
><br>
> I have tried a cut down version of the below query using the two big tables only and it is lightning quick.<br>
><br>
> Does anyone know if there is a way to perform joins across more than two tables?<br>
><br>
> I fear I will have tripped on the last hurdle (I am currently prototyping a proposed system) if I cant perform joins across more than two tables.<br>
><br>
> Many Thanks,<br>
> Dan<br>
><br>
> -----Original Message-----<br>
> From: RUBINO, Dana, GBM<br>
> Sent: 30 September 2008 15:59<br>
> To: <a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
> Subject: Extremely poor Mnesia performance<br>
><br>
><br>
> Hey all,<br>
><br>
> I am doing some benchmarking with Mnesia at the moment and am pretty disappointed to say the least.<br>
><br>
> I'm hoping I am doing something wrong.<br>
><br>
> Running a 5 table join below: (two of the tables have ~50k rows the rest a couple of hundred)<br>
><br>
> execute(qlc:q([I#i.user_id       ||   I <- mnesia:table(i),<br>
>                                                C <- mnesia:table(c),<br>
>                                                I#i.user_id =:= C#c.user_id,<br>
>                                                I#i.group =:= "Group A",<br>
>                                                P <- mnesia:table(p),<br>
>                                                T <- mnesia:table(t),<br>
>                                                S <- mnesia:table(s),<br>
>                                                C#c.platform_id =:= P#p.platform_id,<br>
>                                                C#c.trans_id =:= T#t.trans_id,<br>
>                                                C#c.sales_id =:= S#s.sales_id<br>
>                                                ])).<br>
><br>
> On a normal RDBMS this query returns in < 1min. I am yet to get a result from Mnesia and its been running for 10 mins.<br>
><br>
> Is there anyway I can see what's going wrong with this query under the hood?<br>
><br>
> Thanks,<br>
> Dan<br>
><br>
<br>
</div></div>Do you really need one result set that makes use of values in all five<br>
tables? Is it possible to have a i.user_id that does not have a<br>
corresponding c.user_id, and can the c.platform_id, ... point to<br>
non-existant p, ... entries? If not, that is, you have (conceptual)<br>
foreign key constraints, then you can probably cut down the query to<br>
just the i and c tables with conditions that the c.platform_id, ...<br>
have values.<br>
<br>
Robby<br>
<div><div></div><div>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div></div></div>
</div><br></div>