从varchar更改为mediumtext会导致性能下降

时间:2017-12-05 11:38:42

标签: mysql pdo query-performance

我有一个存储网站产品评论的表格。该表使用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;

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

两种数据类型的处理几乎相同。缓慢还有许多其他可能的原因。 (但我所知道的不是MEDIUMTEXTVARHAR更糟糕。)

所以......让我们看看我们是否可以加快网页的速度......

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个字符,请使用TEXTVARCHAR(1000),而不是MEDIUMTEXT。如果您尝试提高64K字节(可能 4K utf8mb4 字符),请使用TEXT

你确实需要这个(按任意顺序列):

INDEX(part_id, language)

如果有很多&#34;流失&#34; (在MyISAM表中删除和/或更新后跟更多插入),数据可能会碎片化,因此速度很慢。 VARCHARTEXT都可能发生这种情况。 InnoDB不会发生这种情况。