官方博客
官方博客

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

转自 https://bbs.csdn.net/topics/392004703?list=24615175

目前遇到问题了。想提升查询速度。

目前的数据库中有500

转自 https://bbs.csdn.net/topics/392004703?list=24615175

目前遇到问题了。想提升查询速度。

目前的数据库中有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

用in 方法不知道为何不走主键

SELECT
 id,rot FROM ks_hs where id in (SELECT id FROM ks_hs WHERE h1=6262 union
 SELECT id FROM ks_hs WHERE h2=4518 union SELECT id FROM ks_hs WHERE 
h3=14785 union SELECT id FROM ks_hs WHERE h4= 32308 )

SELECT
 id,rot FROM ks_hs where id in (SELECT id FROM ks_hs WHERE h1=6262 union
 SELECT id FROM ks_hs WHERE h2=4518 union SELECT id FROM ks_hs WHERE 
h3=14785 union SELECT id FROM ks_hs WHERE h4= 32308 ) and 
bit_count(h1^6262)+bit_count(h2^4518)+bit_count(h3^14785)+bit_count(h4^32308)<=4;

同样in 走主键

SELECT id,rot FROM ks_hs where id in (232,3,4,,56)

 附  图像旋转角度 实现部分思路 https://bbs.125.la/forum.php?mod=viewthread&tid=14469311&page=1&authorid=235884

不是简单的 两图对比测角度。实现方法 有过中心直线关键点 找位置。这法子必须 先 根据验证图片 找到 对比图(测量过角度的底图)。我认为 很难找到,

    列明 同志 用易语言 实现 ,旋转图找角度 https://bbs.125.la/forum.php?mod=viewthread&tid=14470097

只有用旋转后,与旋转前图可以找到点,不同的图片找不到。这说明…………

    还是用这法子好,不用找原图,直接出角度。查数据库呀。图片缩小到 8 * 8 像素,好像图片相似度查询 都是用的这种8 * 8 图。灰色化, 二值化。二值化不要用固定阈值,3*3 这种高斯均值(加权平均值)。数据保存到数据库,查询用

SELECT
 id,rot FROM ks_hs where id in (SELECT id FROM ks_hs WHERE h1=6262 union
 SELECT id FROM ks_hs WHERE h2=4518 union SELECT id FROM ks_hs WHERE 
h3=14785 union SELECT id FROM ks_hs WHERE h4= 32308 ) and 
bit_count(h1^6262)+bit_count(h2^4518)+bit_count(h3^14785)+bit_count(h4^32308)<=4;

还想叫汉明距的什么来着。

一般能找到1 到5 6个角度。(0 度,1 度,359度在这种直接返回0 度,其他取中间值)。数据量小,准确性不明。

附  https://github.com/scupte/xuanzhaunyanz







万条数据

表结构如下:

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

用in 方法不知道为何不走主键

SELECT id,rot FROM ks_hs where id in (SELECT id FROM ks_hs WHERE h1=6262 union SELECT id FROM ks_hs WHERE h2=4518 union SELECT id FROM ks_hs WHERE h3=14785 union SELECT id FROM ks_hs WHERE h4= 32308 )

SELECT id,rot FROM ks_hs where id in (SELECT id FROM ks_hs WHERE h1=6262 union SELECT id FROM ks_hs WHERE h2=4518 union SELECT id FROM ks_hs WHERE h3=14785 union SELECT id FROM ks_hs WHERE h4= 32308 ) and bit_count(h1^6262)+bit_count(h2^4518)+bit_count(h3^14785)+bit_count(h4^32308)<=4;

同样in 走主键

SELECT id,rot FROM ks_hs where id in (232,3,4,,56)

 附  图像旋转角度 实现部分思路 https://bbs.125.la/forum.php?mod=viewthread&tid=14469311&page=1&authorid=235884

不是简单的 两图对比测角度。实现方法 有过中心直线关键点 找位置。这法子必须 先 根据验证图片 找到 对比图(测量过角度的底图)。我认为 很难找到,

    列明 同志 用易语言 实现 ,旋转图找角度 https://bbs.125.la/forum.php?mod=viewthread&tid=14470097

只有用旋转后,与旋转前图可以找到点,不同的图片找不到。这说明…………

    还是用这法子好,不用找原图,直接出角度。查数据库呀。图片缩小到 8 * 8 像素,好像图片相似度查询 都是用的这种8 * 8 图。灰色化, 二值化。二值化不要用固定阈值,3*3 这种高斯均值(加权平均值)。数据保存到数据库,查询用

SELECT id,rot FROM ks_hs where id in (SELECT id FROM ks_hs WHERE h1=6262 union SELECT id FROM ks_hs WHERE h2=4518 union SELECT id FROM ks_hs WHERE h3=14785 union SELECT id FROM ks_hs WHERE h4= 32308 ) and bit_count(h1^6262)+bit_count(h2^4518)+bit_count(h3^14785)+bit_count(h4^32308)<=4;

还想叫汉明距的什么来着。

一般能找到1 到5 6个角度。(0 度,1 度,359度在这种直接返回0 度,其他取中间值)。数据量小,准确性不明。

附  https://github.com/scupte/xuanzhaunyanz







2019-10-02 11:49:54
0 热度