mysql数据同步之后出现的问题: 两个mysql数据同步之后发现两个库执行同一条sql语句执行效率差几十倍
通过explain 查看执行计划发现两个实例走了不同的执行计划
查看了下索引都是一样的,只是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
这样再查看目标库的执行就和源库一样了
问题也迎刃而解