我的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
下面是我的函数
// 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;
}
这个查询大约需要2秒到3秒的时间来运行。为什么?我没有left join或其他表。
谢谢
发布于 2011-11-02 19:10:12
在ip列上建立索引。
网上有大量关于查询分析和改进的信息,所以我不再重复了,但是索引将会非常有帮助。
我猜security.ip
是一个非常大的表,所以查找变得很慢。
索引的缺点:写入变得有点慢,所以如果你向那个表写了很多东西,你可以试着把禁止的部分卸载到一个新的表,比如banned_ips
。
https://stackoverflow.com/questions/7979329
复制相似问题