Performance of mnesia:select/2

Vance Shipley vances@REDACTED
Fri Feb 26 23:46:14 CET 2021

On Fri, Feb 26, 2021 at 10:12 PM Jacob <jacob01@REDACTED> wrote:
> assuming that the match spec compiler does clever things with patterns,
> I'd use select with the following
>    MatchExpression = [ {{'_', K, '_'}, [], ['$_']} || K <- Keys ]

Sure, that's better, my example is simplified from my real use case
which has a more complicated fun().

> If did some quick measurements with plain ETS, timer:tc and 500 keys out
> of 1000000 table entries and got:

Thanks a bunch for doing what I should have.  I understand that
empirical test on your own environment is the last word but also
interested in the 'why?' question.  My intuition was that select could
benefit from a lower level (C) implementation while interactive reads
may involve more context switching.

>    * using pattern, [ordered_set]: 4532605 us
>    * using pattern, [set]              :  4645525 us
>    * using pattern, [ordered_set, {keypos, 2}]: 3826 us (!!!)
>    * using pattern, [set, {keypos, 2}]: 5714 us (!!!)

Yes, the point was to use the actual keys of the table.  As I
understand it {ets,mnesia}:select/? will optimize when keys or indexes
are involved.


More information about the erlang-questions mailing list