&我需要相互比较looooong位序列(最多1000位),目前我有一个16列的表(16 * 64 = 1024):
userid block_1 block_2 block_3 ...
1 1001... 1100... 0010...
2 1101... 1011... 0111...
3 1011... 0111... 1100...
我的陈述:
select sh.userid,
sum(bit_count(se.block_1 & sh.block_1)+bit_count(se.block_2 & sh.block_2)+...)
from my_table se, my_table sh
where se.userid = 1
and se.userId != sh.userId
group by sh.userId
大约有500万个条目,查询时间约为1.5秒,我猜这已经很不错了。 bit_count-和& -part大部分时间都丢失了,因此我问自己是否还有一些改进空间。
有没有更好的方法来比较很长的二进制序列?
修改
我希望se.block_X包含比sh.block_X多得多的0;如果我这样做会有所作为
se.block_X & sh.block_X
or
sh.block_X & se.block_X
?我希望第一个更快。
1
和0
在很多类别中代表yes
和no
,我只对两个条目所说的yes
感兴趣。所以
10101011100101011
&
10010101101001010
=================
10000001100001010
现在我现在两个人都说是的。对于我的用例,我必须比较,例如我的答案中有大约500万条其他答案的答案,而且大约有1000个问题。所以我有一个包含500万个条目的表,每个条目都有16x64位列。然后我必须将其中一个条目与其他所有条目进行比较。