使用PHP应用程序查询速度慢但不使用phpMyadmin

时间:2015-03-24 17:08:38

标签: php mysql database pdo mysqli

我对MySQL的查询存在性能问题。

使用CakePHP 2.x框架进行查询,但为了简化,我使用标准PDO创建了以下测试来进行查询:

public function testPDOconnection()
{
    $query = 'SELECT City.id, lng, lat, country_id, region,
        (`I18n__name`.`content`) AS `City__i18n_name`
        FROM `cities` AS `City`
        INNER JOIN `i18n` AS `I18n__name` ON (`City`.`id` = `I18n__name`.`foreign_key` AND `I18n__name`.`model` = "City" AND `I18n__name`.`field` = "name" AND `I18n__name`.`locale` = "eng")
        INNER JOIN `i18n` AS `I18n__desc` ON (`City`.`id` = `I18n__desc`.`foreign_key` AND `I18n__desc`.`model` = "City" AND `I18n__desc`.`field` = "desc" AND `I18n__desc`.`locale` = "eng")
        WHERE `City`.`id` IN (641, 47, 216, 62, 323, 164, 306, 1591, 1174, 2690, 1065, 50, 2691, 826, 238, 1037, 2728, 2729, 2730)';
    $db = new PDO('mysql:host='.$this->server.';dbname='.$this->dbname.';charset=utf8', $this->user, $this->password);

    $start = microtime(true);
    $res = $db->query($query);
    debug(microtime(true) - $start, false); // output around 31.568451 seconds

    debug($res->fetchAll()); // output all results
    $db = null;
}

当我通过phpMyadmin运行查询时,执行需要大约0.31秒(很长一段时间,但最终查询将使用memcached在我的最终应用程序中缓存),但是当我使用我的PHP应用程序运行它时(使用PDO或CakePHP模型抽象层),需要 30秒(不可接受)。这两个测试是从同一台计算机(我的工作笔记本电脑)执行的,数据库位于AWS中。

我知道这个查询不是最好的,可以有更好的优化,但它是由CakePHP的翻译行为自动生成的。

数据库表中填充了数千个条目。少量条目(例如几百个)不会出现此问题,但我之前讨论的2个查询(phpMyAdmin和我的PHP应用程序)是在同一个数据库上进行的。

有关这种时间差异如何可能的暗示?

0 个答案:

没有答案