相关疑难解决方法(0)

mysql查询慢 - IP查找(禁止或不禁止)

我在我的PHP文件上有一个函数,用于检查IP是否被禁止.出于某种原因,我的网站非常慢,问题是当我检查IP是否被禁止时.

(我删除检查的代码,我的网站再次快速)

这是我的代码:

// index.php - everything redirects to this file in the .htaccess
<?php
include('config.php');
if(isIpBanned($_SERVER['REMOTE_ADDR'])) {
 die('access denied');
}
// rest of the code
Run Code Online (Sandbox Code Playgroud)

这是我的功能

// config.php
<?php
function isIpBanned($db, $ip) { // $db is declared correctly
 $goodIP = $db->getRecord("SELECT is_banned FROM security.ip WHERE ip = '$ip'"); // this function works and return 1 or 0
 return (bool)$goodIP;
}
Run Code Online (Sandbox Code Playgroud)

此查询大约需要2秒到3秒才能运行.为什么?我没有离开加入或其他表.

谢谢

php mysql ip performance

16
推荐指数
1
解决办法
589
查看次数

Mysql汉明距离的十六进制值

我有一些存储在mysql中的哈希值,我将通过汉明距离进行比较.

存储的哈希值如下:

qw 1 ffe71b001820a1fd 
qw 2 ffffb81c1c3838a0 
qw 3 fff8381c1c3e3828 
qw 4 fffa181c3c2e3920 
qw 5 fffa981c1c3e2820 
qw 6 ff5f1c38387c1c04 
qw 7 fff1e0c1c38387ef 
qw 8 fffa181c1c3e3820 
qw 9 fffa381c1c3e3828
Run Code Online (Sandbox Code Playgroud)

我通常会像:

SELECT product_id, HAMMING_DISTANCE(phash, 'phashfromuserinput') ;
Run Code Online (Sandbox Code Playgroud)

但是在mysql汉明距离是按位运算符,如果字符串只是数字,我可以这样做:

SELECT pagedata,BIT_COUNT(pagecontent^'$encrypted')searchengine WHERE pagecontent > 2 ; ")
Run Code Online (Sandbox Code Playgroud)

它仅适用于整数(数字),但我的要求是使用数字和字母,例如:

74898fababfbef46 and 95efabfeba752545
Run Code Online (Sandbox Code Playgroud)

从我的小研究中我知道,首先我必须将字段转换为binary然后使用或bitcount使用:CASTCONVERT

SELECT BIT_COUNT( CONV( hash, 2, 10 ) ^ 
0b0000000101100111111100011110000011100000111100011011111110011011 )
Run Code Online (Sandbox Code Playgroud)

要么

SELECT BIT_COUNT(CAST(hash AS BINARY)) FROM data;
Run Code Online (Sandbox Code Playgroud)

这可以将数据转换为binary和使用bitcount.现在问题出现了该varbinary存储在字符/哈希值mysql …

php mysql hash hamming-distance

16
推荐指数
1
解决办法
1841
查看次数

两个phash之间的mysql汉明距离

我有一个表A,其中有一个列'template_phash'.我存储了400K图像生成的phash.

现在我拍摄一张随机图像并从该图像生成一个镜头.

现在我如何查询,以便我可以从表A获得汉明距离差小于阈值的记录,比如说20.

在SQL中看到了二进制字符串的汉明距离,但无法弄明白.

我想我发现我需要制作一个功能来实现这个但是怎么做?

我的两个phash都在BigInt中,例如:7641692061273169067

请帮我制作这个功能,以便我可以查询

SELECT product_id, HAMMING_DISTANCE(phash1,  phash2) as hd 
FROM A 
WHERE hd < 20 ORDER BY hd ASC;
Run Code Online (Sandbox Code Playgroud)

mysql hamming-distance

10
推荐指数
1
解决办法
4965
查看次数

在数据库中进行汉明距离/相似性搜索

我有一个过程,类似于生成感知哈希的tineye,这些是32位整数.

我打算将来存储在一个sql数据库(也许是一个nosql db)中

但是,我很难理解如何根据哈希的相似性检索记录.

有任何想法吗?

sql search similarity nosql hamming-distance

5
推荐指数
1
解决办法
4342
查看次数

MySQL或PostgreSQL的汉明距离优化?

我试图在MySQL数据库中改进搜索类似图像的pHashed.现在我比较pHash计算汉明距离像这样:

SELECT * FROM images WHERE BIT_COUNT(hash ^ 2028359052535108275) <= 4
Run Code Online (Sandbox Code Playgroud)

选择结果(引擎MyISAM)

  • 20000行; 查询时间<20ms
  • 100000行; 查询时间~60ms#这很好,直到达到150000行
  • 30万行; 查询时间~150ms

因此查询时间增加取决于表中的行数.


我还尝试在SQL上的二进制字符串上的stackoverflow 汉明距离上找到解决方案

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
Run Code Online (Sandbox Code Playgroud)

行300000; 查询时间~240ms


我将数据库引擎更改为PostgreSQL.将此MySQL查询转换为PyGreSQL但 没有成功.行300000; 查询时间〜18s


有优化上述查询的解决方案吗? 我的意思是优化不依赖于行数.

我有限的方法(工具)来解决这个问题.MySQL到目前为止似乎是最简单的解决方案,但我可以在每个开源数据库引擎上部署代码,该引擎将在专用机器上使用Ruby.有一些针对MsSQL的现成解决方案/sf/answers/415166111/(未经测试).也许有人知道如何为MySQL或PostgreSQL翻译它.

请根据一些代码或观察结果发布答案.我们在stackoverflow.com上有很多关于汉明距离的理论问题

谢谢!

mysql sql query-optimization hamming-distance phash

5
推荐指数
1
解决办法
4935
查看次数