У меня есть таблица 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
поисков для каждой операции фильтра.Есть ли какая-либо стратегия индексации для таких случаев?