Индексирование списка элементов в памяти для поиска - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть таблица sql:

Prop1   Prop2    Prop3    Prop4   Priority   Value
A       NULL     B        C       12         22
NULL    NULL     M        F       20         1
...

Prop1, Prop2, Prop3, Prop4 может быть NULL или некоторыми строковыми значениями.Я фильтрую строки по Prop1, Prop2, Prop3, Prop4.В SQL фильтрация будет выглядеть следующим образом:

select top 1 * from items where 
(Prop1 is null OR Prop1 = @Prop1)
and (Prop2 is null OR Prop2 = @Prop2)
and (Prop3 is null OR Prop3 = @Prop3)
and (Prop4 is null OR Prop4 = @Prop4)
order by Priority desc

Чтобы сократить затраты на ввод-вывод и ускорить фильтрацию, я загружаю всю таблицу в память при запуске приложения.Поэтому я хочу сделать такую ​​же фильтрацию в памяти приложения.Единственная идея сделать такую ​​же фильтрацию состоит в том, чтобы поместить все элементы в словарь по ключу {Prop1, Prop2, Prop3, Prop4}, а затем создать список ключей на основе структуры фильтра:

INPUT FILTER

{ Prop1 = A, Prop2 = B, Prop3 = C, Prop4 = D }

ФИЛЬТРЫ ОБОБЩЕННЫХ НУЛЕВОЙ

- with one null
{ Prop1 = NULL, Prop2 = B, Prop3 = C, Prop4 = D }
{ Prop1 = A, Prop2 = NULL, Prop3 = C, Prop4 = D }
{ Prop1 = A, Prop2 = B, Prop3 = NULL, Prop4 = D }
{ Prop1 = A, Prop2 = B, Prop3 = C, Prop4 = NULL }
- with two nulls
{ Prop1 = NULL, Prop2 = NULL, Prop3 = C, Prop4 = D }
{ Prop1 = NULL, Prop2 = B, Prop3 = NULL, Prop4 = D }
....
{ Prop1 = NULL, Prop2 = NULL, Prop3 = NULL, Prop4 = NULL }

Затем найдите значения для этих ключей, упорядочите их по приоритету и получите 1-й.Но для каждой операции фильтрации мне нужно сделать 16 поисков в словаре.И если у нас есть Prop5 дополнительно, мне нужно 32 поисков для каждой операции фильтра.Есть ли какая-либо стратегия индексации для таких случаев?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...