我了解列式数据库非常适合不使用很多字段进行查找的快速查询,但是如果您只使用 OR 语句怎么办?
例如,我想要所有具有 (Val A, Col A) OR (Val B, Col B) OR (Val C, Col C) OR...(Val N, Col N) 的记录
我希望我问的很清楚。
编辑:
查询 OR 语句看起来A = 1 OR B = 3 OR C = 6 ... OR N = 7
我这样做的原因是我会有一个行/记录,其中每个 col/字段都被加密,并且我希望所有与任何字段匹配的记录都可以进行聚类练习。这个查询每秒可以运行 100 次。
此答案中的示例是从 SQL Server 的角度编写的。重复这个问题,当 WHERE 子句是一系列 OR 语句时,您需要快速查询。查询将针对 4 到 20 个不同的列进行过滤,而您事先并不知道这些列。第一个查询可能如下所示:
第二个查询可能如下所示:
这对于关系数据库来说仍然是一个难题,具体取决于表的大小和所需的查询响应时间。最快的方法可能是在每一列上定义一个单列索引,并使用带有查询优化器的 RDBMS,该查询优化器能够找到一个索引联合计划。从存储、容量限制或 DML 开销的角度来看,为每一列创建索引可能是不切实际的。
一般来说,可以公平地说,对于这种类型的查询,列存储比行存储更好。Microsoft 列出了一个类似的问题(最终用户在房地产网站上通过数百个不同的过滤器进行搜索)作为列存储有效性的一个很好的案例研究。我认为这就像您要扫描整个表一样简单,您不妨扫描一个较小的表,因为与行存储相比,列存储提供的压缩通常更好。与行存储相比,不需要表中的所有列当然会使列式存储更具吸引力。
如果您真的关心性能,我建议您模拟一些示例数据并尝试一下。对于下面的表和查询,我最终得到了 4 秒的行存储查询响应时间、1 秒的列存储响应时间和 13 毫秒的所有列都被索引的响应时间。这只是说明一般观点的一个例子。您的数据是问题的重要组成部分。