我一直在使用Google PageSpeed Insights分析我的网站效果,而它报告的主要问题是服务器响应时间很慢,似乎平均约为1.5 - 2秒。谷歌建议尝试达到200毫秒,所以我离开了。
我已经建立的是从数据库中检索数据的查询导致了非常严重的性能问题。我的网站广泛使用缓存来检索网站的各个部分。整个网页通常可以从缓存表中的5个数据库查询中生成。
当我将返回值硬编码为此时(请注意'这是测试选择):
$sql = "SELECT 'This is a test'
FROM cache
WHERE url = ?
AND language = ?
AND currency = ?";
$stmt = $conn->prepare($sql);
if (!$stmt) {
ThrowDBError($conn, $stmt, $sql);
}
$stmt->bind_param('sss', $url, $language, $currency);
if (!$stmt->execute()) {
ThrowDBError($conn, $stmt, $sql);
}
$stmt->bind_result($cache);
$stmt->fetch();
$stmt->close();
服务器响应速度降至0.5秒。当我把它放回去选择实际的数据列page_body时,像这样:
$sql = "SELECT page_body
FROM cache_copy
WHERE url = ?
AND language = ?
AND currency = ?";
$stmt = $conn->prepare($sql);
if (!$stmt) {
ThrowDBError($conn, $stmt, $sql);
}
$stmt->bind_param('sss', $url, $language, $currency);
if (!$stmt->execute()) {
ThrowDBError($conn, $stmt, $sql);
}
$stmt->bind_result($cache);
$stmt->fetch();
$stmt->close();
对于网站对缓存表进行的5次查询,服务器响应时间始终为1.5 - 2秒。
缓存表只包含8,000行,我认为我已正确索引它。列page_body是一个媒介 - 有没有人知道使用mediumtext的性能相关问题?我无法理解为什么它会在加载时间上增加1.5秒。
以下是缓存表的DDL:
CREATE TABLE `cache` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(255) NOT NULL,
`language` varchar(2) NOT NULL,
`currency` varchar(3) NOT NULL,
`page_body` mediumtext NOT NULL,
`cached_time` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url, language, currency` (`url`,`language`,`currency`) USING BTREE,
KEY `cached_time` (`cached_time`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
有什么想法吗? 非常感谢
答案 0 :(得分:0)
它返回了多少行?如果只返回1行,则应该在200ms以下。
哦!是看问题了。您正在使用MyISAM。别。切换到InnoDB。
如果真实表格类似于cache
,您将获得几乎相同的速度。我建议你摆脱缓存。