记录一次Mysql关联查询慢的问题排查过程
本次查询慢的主要原因是主表和关联表字段字符编码不一致导致
以下为排查过程及解决方法:
使用EXPLAIN
语句解析Sql执行过程发现关联查询没有走索引
EXPLAIN SELECT XXX
发现索引和字段类型都没问题,查看关联表的字符集
SHOW FULL COLUMNS FROM XXX
发现了主表字符集和关联表字符集不一致,怀疑是数据库备份回来后建表导致的,解决方法是在建表时指定字符集,或者修改字符集类型,以下为建表时指定字符集的语句,正常情况下建表时默认字符集就为utf8_general_ci
不需要指定
create table XXX
(
GUID varchar(36) COLLATE utf8_general_ci not null,
UNIT_CODE bigint,
CON_UNIT_CODE bigint,
SAL_CODE varchar(30) COLLATE utf8_general_ci not null,
SAL_DATE datetime,
CNTSTM_ID varchar(36) COLLATE utf8_general_ci not null,
BACT_CODE varchar(20) COLLATE utf8_general_ci not null,
BATNMB varchar(50) COLLATE utf8_general_ci not null,
QTY int,
UPDATE_TIME datetime,
primary key (GUID)
);