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

Gin*_*van 16 php mysql ip performance

我在我的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秒才能运行.为什么?我没有离开加入或其他表.

谢谢

CAF*_*FxX 26

  1. IP列上放一个(唯一的?)索引
  2. 通过将文本表示转换为"本机"表示(ipv4适合a INT UNSIGNED,ipv6 in 2 BIGINT UNSIGNED),使用正确的数据类型:这将使您的表更小,并且在扫描期间将需要更少的I/O

并且,作为旁注,即使$_SERVER["REMOTE_ADDR"]应该是安全的,也绝对不要忘记SQL查询中的数据!

  • @ Col.Shrapnel这就是为什么使用正确的索引是我的列表上的#1点...第二个只是一个补充(但是,根据我的经验,有时这种数据类型问题会导致大量减速;请参阅http:// stackoverflow.com/questions/4777070/hamming-distance-on-binary-strings-in-sql) (2认同)