5.0 和 5.6 上的 MySQL 查询解释效率

标签 mysql explain optimization mysql-5.6

我们刚刚将我们的数据库服务器移到一台新机器上,并将 mysql 从 5.0 升级到 5.6。我们有一个保持同步的救助服务器,它仍然是 mysql 5.0,所有表都是 MyISAM,我在新服务器上遇到了减速问题。我已经在两台服务器上的所有相关表上运行检查、分析、修复、优化,但新服务器仍然需要大约 20 秒,而旧服务器需要 0.2 秒来运行以下查询。

SELECT DISTINCT `personBaseData`.`PersonID`, 
            `personBaseData`.`Forename`, 
            `personBaseData`.`Nickname`, 
            `personBaseData`.`Surname`, 
            COUNT(*) AS Count 
FROM   `personBaseData` 
   LEFT JOIN `sessionAttendance` 
          ON (( `personBaseData`.`PersonID` = 
                 `sessionAttendance`.`ContactID` ) 
               AND ( `sessionAttendance`.`ContactType` = 'Individual' ) ) 
   JOIN `sessionBaseData` 
          ON (( `sessionAttendance`.`SessionID` = `sessionBaseData`.`SessionID` )) 
   JOIN `sessionGroupBaseData` 
          ON (( `sessionBaseData`.`SessionGroupID` = `sessionGroupBaseData`.`SessionGroupID` )) 
WHERE  `personBaseData`.`PersonID` IN (SELECT `PersonID` 
                                   FROM   `personFlexData` 
                                   WHERE  ( `flexName` = 'Organisation_P_27' 
                                            AND `flexValue` = 'HCCT' )) 
   AND `sessionBaseData`.`StartDate` > '2013-08-15' 
   AND `sessionAttendance`.`Attended` = '1' 
   AND `sessionGroupBaseData`.`Title` = 'Open Access (HCCT)' 
   AND `personBaseData`.`Type` & '1' 
GROUP  BY `personBaseData`.`PersonID` 
ORDER  BY Count DESC, 
      `personBaseData`.`Forename` ASC, 
      `personBaseData`.`Nickname` ASC, 
      `personBaseData`.`Surname` ASC ;

在两台服务器上运行这个sql,返回

新的 5.6 服务器

enter image description here

Bailout 5.0 服务器

enter image description here

有什么明显的我可以追求的吗,看起来像是遍历变量,寻找任何明显的东西,但我不确定主要的踢球者可能是什么,但显然我想做主要选择不是简单的,只有一个大行数。

提前致谢

最佳答案

在 5.5 的发布/审核过程中,我们检查了 5.0、5.5 和 5.6 中的每个设置,以尝试创建一个 super 集。

我们发现 5.5 到 5.6 中的 optimizer_switch 设置发生了很大的变化,因此在我们回滚之前让我们将 extras 设置为关闭。

这成功了。

经过进一步检查,关键设置是半连接。将此设置为关闭,使 5.6 与 5.5 一样快

我真的希望这对某人有帮助。
干杯

关于5.0 和 5.6 上的 MySQL 查询解释效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20224841/

相关文章:

php - 分解 CSV 中的大量行并将它们作为批处理的 php 进行处理

javascript - 在 JavaScript 中比较 MySQL 日期

mysql - 使用连接缓冲区( block 嵌套循环)对额外列中的 EXPLAIN mysql 命令意味着什么?

当 WHERE 子句有多个 IN 时,MySQL 检查太多行

php - MYSQL PHP 一次查询跳转多张表

java - 使用 Properties 类加载 map

php - 如何减少规范化数据库中的查询数量?

Mysql 显示时间戳间隔低于 4 分钟的记录

Postgresql 对索引列的查询非常慢

c++ - 树向量化 : gcc optimization flag