【发布时间】:2021-06-11 05:59:17
【问题描述】:
我有一个 SQL 查询:
SELECT country_code FROM GeoIP WHERE 3111478102>=ip_from AND 3111478102<=ip_to;
我尝试在 phpMyAdmin 和普通 php 脚本中执行相同的查询,结果如下:
phpMyAdmin
PHP 脚本
如您所见,在 phpMyAdmin 中完全执行查询只用了 0.8 秒。而普通 PHP 脚本需要 4.5 秒!
php脚本代码:
<?php
// ob_start();
// error_reporting(0);
error_reporting(E_ALL);
ini_set('display_errors', 'On');
header_remove("X-Powered-By");
ini_set('session.gc_maxlifetime', 13824000);
session_set_cookie_params(13824000);
session_start();
include_once './config.php';
// include_once './functions/mainClass.php';
$beforeMicro = microtime(true);
$res = $conn->query("SELECT country_code FROM GeoIP WHERE 3111478102>=ip_from AND 3111478102<=ip_to");
if ($res->rowCount() > 0){
$sen = $res->fetch(PDO::FETCH_OBJ);
$country_code = $sen->country_code;
print_r([$country_code]);
}
$afterMicro = microtime(true);
echo 'time:'.round(($afterMicro-$beforeMicro)*1000);
?>
与此同时,我正在设置一个新的网络服务器并使用以下内容:
CentOS 8
Apache 2.4.46
PHP 7.2.24
请注意:我在 (GeoIP) 中搜索的表包含超过 39 条 minion 记录。但我认为这不是问题,因为相同的查询在同一台服务器上运行得更快。我还尝试将相同的数据库和 PHP 脚本上传到另一个共享主机帐户(不是我自己的服务器),并且它可以在 1.6 秒内从 php 脚本执行查询。
【问题讨论】:
-
试试
SELECT SQL_NO_CACHE country_code...。 PMA 是否与您正在运行的代码在同一台服务器上?它们与 MySQL 在同一台服务器上吗? -
@user3783243 我尝试在没有
$conn->query()和与之相关的行的情况下执行相同的php 脚本。结果是time: 0。我还尝试在 phpMyAdmin 中执行相同的查询而不让它缓存,它是相同的(时间:0.7 或时间:0.8)。 -
@rjdown 我试过
SQL_NO_CACHE,执行时间是一样的(0.7s 或 0.8s)。 PHP 脚本和 PMA 都在同一台服务器上运行并使用相同的 MySQL。 -
@rjdown:SQL_NO_CACHE 已被弃用一段时间,请参阅:stackoverflow.com/questions/58584596/…
-
@user3783243,请查看以下截图:prnt.sc/10kgugh
标签: php mysql phpmyadmin centos8