索引存储器中的项目列表以进行搜索

时间:2018-09-22 07:00:13

标签: algorithm dictionary search indexing

我有一个这样的sql表:

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

Prop1Prop2Prop3Prop4可以为NULL或某些字符串值。我按Prop1Prop2Prop3Prop4筛选行。在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

为减少IO成本并加快筛选速度,我在应用程序启动时将整个表加载到内存中。所以我想在应用程序的内存中进行相同的过滤。进行相同过滤的唯一想法是通过键{Prop1, Prop2, Prop3, Prop4}将所有项放入字典,然后根据过滤器结构生成键列表:

输入过滤器

{ 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 }

然后找到这些键的值,按优先级排序并获得第一个。但是,对于每个过滤器操作,我需要在字典中进行16查找。而且如果我们另外有Prop5,则需要为每个过滤器操作进行32查找。是否有针对此类情况的索引策略?

0 个答案:

没有答案