【发布时间】:2013-02-17 19:30:31
【问题描述】:
我试图改进在 MySQL 数据库中搜索相似图像 pHashed。 现在我像这样比较 pHash 计数汉明距离:
SELECT * FROM images WHERE BIT_COUNT(hash ^ 2028359052535108275) <= 4
选择的结果(引擎MyISAM)
- 20000 行;查询时间
- 100000 行; query time ~ 60ms # 这很好,直到达到 150000 行
- 300000 行;查询时间 ~ 150ms
所以查询时间增加取决于表中的行数。
我还尝试了在 stackoverflow 上找到的解决方案 Hamming distance on binary strings in SQL
SELECT * FROM images WHERE
BIT_COUNT(h1 ^ 11110011) +
BIT_COUNT(h2 ^ 10110100) +
BIT_COUNT(h3 ^ 11001001) +
BIT_COUNT(h4 ^ 11010001) +
BIT_COUNT(h5 ^ 00100011) +
BIT_COUNT(h6 ^ 00010100) +
BIT_COUNT(h7 ^ 00011111) +
BIT_COUNT(h8 ^ 00001111) <= 4
行 300000 ;查询时间 ~ 240ms
我将数据库引擎更改为 PostgreSQL。 Translate this MySQL query to PyGreSQL 没有成功。 行 300000 ;查询时间~18s
是否有优化上述查询的解决方案? 我的意思是优化不依赖于行数。
我解决这个问题的方法(工具)有限。 到目前为止,MySQL 似乎是最简单的解决方案,但我可以在每个可以在专用机器上使用 Ruby 的开源数据库引擎上部署代码。 MsSQL https://stackoverflow.com/a/5930944/766217 有一些现成的解决方案(未测试)。也许有人知道如何为 MySQL 或 PostgreSQL 翻译它。
请根据一些代码或观察结果发布答案。我们在 stackoverflow.com 上有很多关于汉明距离的理论问题
谢谢!
【问题讨论】:
-
嘿,我正在尝试像您一样进行类似的图像搜索。但我返回的总是0?你能给我提供关于哈希字符串相关搜索的示例代码吗?
标签: mysql sql query-optimization hamming-distance phash