我对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应用程序)是在同一个数据库上进行的。
有关这种时间差异如何可能的暗示?