官方博客
官方博客

讨论一下汉明距离在MSSQL中的海量数据快速查询方法 [问题点数:100分,结帖人fandaye]

目前遇到问题了。想提升查询速度。
目前的数据库中有500万条数据

表结构如下:

CREATE TABLE [dbo].[hm_tb] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [hm1] [int] NULL ,
    [hm2] [int] NULL ,
    [hm3] [int] NULL ,
    [hm4] [int] NULL 

) ON [PRIMARY]

GO

其中hm1-hm4代表的是hash字符串。字符总长度为64位。分成4块来存储。
每个块存储16位长度的二进制数据。我表中转换为INT类型。

查询相关:
    比如得到一个HASH为:1010100111100011010101010111110001110101100010110101001110011101
    先分成4段:
   1段:1010100111100011  = 43491
   2段:0101010101111100  = 21884
   3段:0111010110001011  = 30091
   4段:0101001110011101  = 21405
  每段为16位长度转化为对应的十进制

计算汉明距离的方法:


select * from hm_tb where bit_count(hm1^43491)+bit_count(hm2^21884)+bit_count(hm3^30091)+bit_count(hm4^21405)<=4

其中bit_count函数和MYSQL中的bit_count类似就是计算一个数字中二进制里面1的个数。

这样就可以得到相似度在93.7%以上的数据。

经计算500万条要1分多种才出结果。这时间太久了。
请问大家有没有好的解决方案。

先从表结构以及能用到的索引方面来讨论一下(貌似这种计算是全表扫描,没地方建索引)。
硬件方面暂时先不讨论。

2019-10-01 18:53:31
0 热度