[erlang-questions] ets select match specification analysis

Tom McNulty tom.mcnulty@REDACTED
Sat Jul 25 22:37:06 CEST 2009


>
> Paul Mineiro wrote:
>> currently tcerl will also recognize a partially bound prefix key and
>> restrict the range of keys considered.  however for an application  
>> i'm
>> working on i need efficient queries corresponding to match  
>> specifications
>> that look like
>> [ { { { '$1', '_' }, '_' },
>>    [ { '>', '$1', Lower }, { '<', '$1', Upper } ],
>>    [ '$_' ]
>>  }
>> ]
>> which ideally would only consider the range of keys defined by tuples
>> whose first element is between Lower and Upper.
>
> Ideally, yes, but the way select() is implemented, it will still
> result in a full scan of the table, unless I've missed some
> key release note somewhere. I'd love to be proven wrong.

Should be able to avoid a full scan with ordered_set's

Efficiency guide:
"There are exceptions when the complete table is not scanned, for  
instance if part of the key is bound when searching an ordered_set  
table, or if it is a Mnesia table and there is a secondary index on  
the field that is selected/matched. If the key is fully bound there  
will, of course, be no point in doing a select/match, unless you have  
a bag table and you are only interested in a sub-set of the elements  
with the specific key."

- Tom


>
> BR,
> Ulf W
> -- 
> Ulf Wiger
> CTO, Erlang Training & Consulting Ltd
> http://www.erlang-consulting.com
>
> ________________________________________________________________
> erlang-questions mailing list. See http://www.erlang.org/faq.html
> erlang-questions (at) erlang.org
>



More information about the erlang-questions mailing list