mysql数据同步之后出现的问题: 两个mysql数据同步之后发现两个库执行同一条sql语句执行效率差几十倍

通过explain 查看执行计划发现两个实例走了不同的执行计划

mysql数据同步之后出现的问题

mysql数据同步之后出现的问题

查看了下索引都是一样的,只是mysql在选择上选择了不同的索引

源库使用ACT_IDX_HI_IDENT_LNK_PROCINST索引执行效率较好,目标库默认使用的是ACT_IDX_HI_IDENT_LNK_USER,执行效率上变慢很多,

强制目标库走ACT_IDX_HI_IDENT_LNK_PROCINST索引查看到的执行计划效率不如ACT_IDX_HI_IDENT_LNK_USER的,所以MySQL选择了使用ACT_IDX_HI_IDENT_LNK_USER

explain
SELECT
  RES.*
FROM
  ACT_HI_PROCINST RES
WHERE
  (
    EXISTS (
      SELECT
        LINK.USER_ID_
      FROM
        ACT_HI_IDENTITYLINK LINK force index(ACT_IDX_HI_IDENT_LNK_PROCINST)
      WHERE
        USER_ID_ = '****'
      AND LINK.PROC_INST_ID_ = RES.ID_
    )
  )
ORDER BY
  RES.START_TIME_ DESC
LIMIT 10 OFFSET 0

 

但是执行效率还是比较好。所以判断可能是MySQL统计信息不准确导致选择索引不对

在目标库上执行一下

analyze table ACT_HI_PROCINST

analyze table ACT_HI_IDENTITYLINK

这样再查看目标库的执行就和源库一样了

问题也迎刃而解

相关文章: