MySQL查询解释5.0和5.6的效率

时间:2013-11-26 18:16:15

标签: mysql explain optimization mysql-5.6

我们刚刚将数据库服务器迁移到新计算机上,并从5.0升级到mysql 5.6。我们有一个保持同步的救援服务器,仍然在mysql 5.0,所有表都是MyISAM,我在新服务器上的速度减慢了。我在两台服务器上对所有相关表运行检查,分析,修复,优化,新服务器在旧服务器的0.2秒内运行以下查询大约需要20秒。

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

救助5.0服务器

enter image description here

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

提前致谢

2 个答案:

答案 0 :(得分:2)

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

我们在5.5到5.6中确定了 optimizer_switch 设置的大变化,因此在我们回滚之前,让我们将额外设置为关闭。

这很有用。

进一步检查时,关键设置为半连接。将其设置为关闭,使5.6快速为5.5

我真的希望这有助于某人 干杯

答案 1 :(得分:1)