Database 提高查找行(整型列)的速度
我有一个15整数列,表中有5000000行。给定一个包含15个整数的输入记录,我需要将输入记录与5000000记录表进行比较,并获得所有匹配的行 注1:一行中的所有整数都是唯一的Database 提高查找行(整型列)的速度,database,algorithm,search,hash,Database,Algorithm,Search,Hash,我有一个15整数列,表中有5000000行。给定一个包含15个整数的输入记录,我需要将输入记录与5000000记录表进行比较,并获得所有匹配的行 注1:一行中的所有整数都是唯一的 注2:列匹配顺序和输入记录并不重要。 例如:1、10、15、23、9、22、99、11、19、32、45、21、76、12、33和33、10、15、99、11、19、32、45、21、23、9、22、76、12、1应产生匹配结果 是否可以实现哈希函数/按位操作来为每一行生成唯一的索引。如果记录中的值相同,该函数可以为2
注2:列匹配顺序和输入记录并不重要。
例如:1、10、15、23、9、22、99、11、19、32、45、21、76、12、33和33、10、15、99、11、19、32、45、21、23、9、22、76、12、1应产生匹配结果
是否可以实现哈希函数/按位操作来为每一行生成唯一的索引。如果记录中的值相同,该函数可以为2行返回相同的索引。这并不多,但应该可以让您开始 您可能需要一个哈希函数,该函数生成尽可能少的冲突;但它也必须是可交换的(即:向散列中添加数字的顺序是不相关的)。您可以通过使用异或和位移位的组合来实现这一点(参见此)
您可能希望将散列存储在另一列中。然后可以对正在查找的输入进行散列,并在数据库中查找散列。请注意,哈希允许误报,因此您仍然需要检查候选行是否确实是您想要的(即:对所有内容进行排序和比较)。对于快速查询,您可以预处理表。我将创建一个HashMap,其中15个值的排序数组是键,列索引列表,其中将结果排序到同一数组中是值。例如,条目可能如下所示:
[1,9,10,11,12,15,19,21,22,23,32,33,45,76,99] => [12, 33]
因此,15个值在第12列和第33列中
对于键,您必须创建一个自定义哈希和等于函数
- 散列的一个简单方法是:对查询进行排序,并为每个条目计算
。有关更好的哈希函数,请参见hash*=120941+x
- 对于相等性检查,只需将排序查询的每个索引的编号与键进行比较
另一个想法——既然你主要在探索启发式,你也可以考虑一个更简单的方法:
再保留3列,分别表示最小值、最大值和15列的总和。检查这3行是否与2行匹配将消除大量的真负片。一些假阳性仍然存在。(很容易注意到,在上面的方案中使用k=1与保持列的总和作为索引值相同,索引值是本子方案中提到的3个值之一。)[这可能是一个禁区问题-您的DB设计是否灵活?这似乎不是一个稳定的设计,因为列似乎代表子实体,但我没有能够得出结论的详细信息。]家庭作业?您有15个整数列或1个大整数列,希望将15个绑定整数值打包到其中?500000=500k | 5m?