1

我们刚刚将我们的数据库服务器移到了一台新机器上,并从 5.0 升级到了 mysql 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 服务器

在此处输入图像描述

救助 5.0 服务器

在此处输入图像描述

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

提前致谢

4

2 回答 2

2

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

我们发现 5.5 到 5.6 中的optimizer_switch设置发生了很大变化,所以在我们回滚之前,让我们将附加功能设置为关闭。

这行得通。

进一步检查,关键设置是semijoin。将此设置为off,使 5.6 与 5.5 一样快

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

于 2013-12-06T19:13:24.250 回答