Проблема:
Как эффективно выбирать записи из таблицы, где выбор основан на критериях, включающих два индексированных столбца.
Пример
У меня есть запись,
#rec{key, value, type, last_update, other_stuff}
- У меня есть индексы по ключу (по умолчанию), типу и столбцам last_update
- тип обычно представляет собой атом или строку
- last_update — целое число (миллисекунды в стиле unix с 1970 года)
Я хочу, например, все записи, чей тип = тип и были обновлены с определенной временной метки.
Я делаю следующее (обернутый в негрязную транзакцию)
lookup_by_type(Type, Since) ->
MatchHead = #rec{type=Type, last_update = '$1', _= '_'},
Guard = {'>', '$1', Since},
Result = '$_',
case mnesia:select(rec,[{MatchHead, [Guard],[Result]}]) of
[] -> {error, not_found};
Rslts -> {ok, Rslts}
end.
Вопрос
- Использует ли функция lookup_by_type базовые индексы?
- Есть ли лучший способ использовать индексы в этом случае
- Есть ли совершенно другой подход, который я должен использовать?
Спасибо вам всем