gpt4 book ai didi

php - 如何优化这个 mysql 查询?脚本发布

转载 作者:行者123 更新时间:2023-11-30 22:05:20 25 4
gpt4 key购买 nike

所以我在下面有这段代码,用于连接服务器上的 mysql 并执行命令,它用于任何 .NET 项目的身份验证系统。现在,当我有大约 150 多个在线用户时,它会开始减慢站点速度,并且 mysql 开始使用大量资源。有没有办法让这些 mysql 查询的执行速度更快或者只是不被挂断?

$bn123 = $_GET['bn'];
$hwid = $_GET['hwid'];
$ip = getRealIpAddr();
$pcname = $_GET['pcname'];
$country123 = "N/A";
$time123 = time();

$GetRows = $odb->query("SELECT * FROM `Account` WHERE bn = '$bn123'");
$row_count = $GetRows->rowCount();
$count = $row_count;
if($count == 0){
$odb->exec("INSERT INTO `logs` (id, bn, cpukey, ip, pcname, time, log) VALUES(NULL,'$bn123','$hwid','$ip','$pcname','$time123','SUCCESS - Bot Registered.')");
$odb->exec("INSERT INTO `Account` (id, bn, cpukey, banned, ip, country, pcname, note, online, function, lastlogon) VALUES(NULL,'$bn123','$hwid','0','$ip','$country123','$pcname','','0','','')");
}

$SQLGetUsers = $odb -> query("SELECT * FROM Account WHERE `bn` = '$bn123'") or die(mysql_error());
while ($getInfo = $SQLGetUsers -> fetch(PDO::FETCH_ASSOC))
{
$banned123 = $getInfo['banned'];
if ($banned123 == 0) {
$str = "Not Banned";
} else {
$str = "Banned";
}
}
$response = $str;
if ($response == "Not Banned")
{
$finaleresponse = "Success";
$odb->exec("UPDATE Account SET `online` = '1', `lastlogon` = '$time123', `ip` = '$ip', `country` = '$country123', `pcname` = '$pcname' WHERE `bn` = '$bn123'");
}
else if ($response == "Banned")
{
$finaleresponse = "Banned";
$odb->exec("UPDATE Account SET `online` = '0', `lastlogon` = '$time123', `ip` = '$ip' WHERE `bn` = '$bn123'");
$odb->exec("INSERT INTO logs (id, bn, cpukey, ip, pcname, time, log) VALUES(NULL,'$bn123','$hwid','$ip','$pcname','$time123','ERROR - User banned.')");
}
else
{
$finaleresponse = "Error";
$odb->exec("UPDATE Account SET `online` = '0', `lastlogon` = '$time123', `ip` = '$ip' WHERE `username` = '$username1'");
$odb->exec("INSERT INTO logs (id, username, cpukey, ip, pcname, time, log) VALUES(NULL,'$username1','$hwid','$ip','$pcname','$time123','ERROR - Something went wrong.')");
}
echo Encrypt($finaleresponse);

请告诉我任何优化此代码的方法,因为我认为它已经优化过了,谢谢!这里还有 db.php:

<?php
define('DB_HOST', 'localhost');
define('DB_NAME', '');
define('DB_USERNAME', '');
define('DB_PASSWORD', '');

$odb = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USERNAME, DB_PASSWORD);
?>

最佳答案

INSERTs“不能”很慢。所以它必须是 5 个 SELECTsUPDATEs。 5 不是一个大数字,因此必须缺少索引。

所有 5 个都需要 accountbn 的索引? (请为每个涉及的表提供SHOW CREATE TABLE,所以我不会提出已经完成的建议。)

此外,...不要从 Account 中获取相同的行两次。

关于php - 如何优化这个 mysql 查询?脚本发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968208/

25 4 0
文章推荐: mysql - 联合运营商的替代方案
文章推荐: c# - Parse.com 查询的主线程问题
文章推荐: c# - 使用linq按父级对对象列表进行分组以输出子元素
文章推荐: c# - 将 list 和 list 组合成单个平面列表