开发者社区> 问答> 正文

如何在数据库里优化 汉明距离 查询?

项目里需要一个搜索相似图片的功能,百度了一些dhash的算法,生成了16个长度的hash值,在mysql里这样查询:

 SELECT pk, hash, 
 BIT_COUNT(   CONV(hash, 16, 10) ^ CONV('4c8e3366c275650f', 16, 10) ) as hamming_distance   
 FROM image_hashes   HAVING hamming_distance < 4   ORDER BY hamming_distance ASC; 

经测试,15W条数据,搜索需要很长时间。第二次速度会快些,有啥办法可以优化?

展开
收起
a123456678 2016-07-04 17:46:25 3478 0
1 条回答
写回答
取消 提交回答
  • 如果只是15W数据的话,可以把数据加载到内存里缓存起来,然后在程序里运算,毕竟SQL并不擅长做这种事情。

    仅从你的SQL来说,的确没有太大的优化空间,能想到的就只有以下几点:

    hash列用char代替varchar
    舍弃ORDER BY hamming_distance ASC,改为由程序排序
    建议把DDL语句和EXPLAIN结果也发上来一并分析,不过最大的性能卡口应该是BIT_COUNT(CONV(hash, 16, 10) ^ CONV('4c8e3366c275650f', 16, 10)) as hamming_distance,其实相当于全表扫描了。

    2019-07-17 19:51:00
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载