我有一个存储网站产品评论的表格。该表使用varchar(1000)来存储评论评论平均响应时间为0.5秒。我将保存数据的列的数据类型更改为mediumtext,页面响应时间跳转到1.5 - 2秒。请记住,没有向列中添加其他数据,并且PHP代码是相同的。
我不认为查询时间是问题,因为MySQL报告它需要0.019secs,无论varchar还是mediumtext都是相同的。
我不知道在这里发生了什么。我正在使用MySQL PDO和PHP。我不知道它是服务器问题,是媒体的固有问题,还是其他完全问题。
我尝试将表格类型从MyISAM更改为InnoDB,但没有区别。
这是PHP代码:
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$attrs = array(PDO::ATTR_PERSISTENT => true);
$pdo = new PDO($dsn, $user, $pass, $attrs);
$stmt = $pdo->prepare("SELECT SQL_NO_CACHE comment
FROM reviews_product_comments
WHERE part_id =:partid
and language =:language");
foreach ($parts as $part) {
// bind the parameters
$stmt->bindValue(":partid", $part);
$stmt->bindValue(":language", "en");
if ($stmt->execute()) {
if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$comment = $row['comment'];
echo $comment . "<br>";
}
}
}
$pdo = null;
有什么想法吗?
答案 0 :(得分:-1)
两种数据类型的处理几乎相同。缓慢还有许多其他可能的原因。 (但我所知道的不是MEDIUMTEXT
比VARHAR
更糟糕。)
所以......让我们看看我们是否可以加快网页的速度......
将microtime(true)
放在mysql调用周围 - 确保它是MySQL,而不是PHP。 &#34; 0.019secs&#34;说得通; &#34; 1.5 - 2秒&#34;听起来好像在PHP中正在发生。
使用InnoDB,不 MyISAM。 (尽管你声称相反。)
正确调整;让我们看看SHOW VARIABLES LIKE '%buffer%';
你有多少内存? (交换对于表现来说太糟糕了。)
您要返回多少行?在网页上拥有超过几十个内容是不切实际的,因此请添加ORDER BY...LIMIT...
。
如果用户界面限制为1000个字符,请使用TEXT
或VARCHAR(1000)
,而不是MEDIUMTEXT
。如果您尝试提高64K字节(可能 4K utf8mb4 字符),请使用TEXT
。
你确实需要这个(按任意顺序列):
INDEX(part_id, language)
如果有很多&#34;流失&#34; (在MyISAM表中删除和/或更新后跟更多插入),数据可能会碎片化,因此速度很慢。 VARCHAR
和TEXT
都可能发生这种情况。 InnoDB不会发生这种情况。