今天刚遇到的一个问题,两个有主从关系的表,经常需要做关联查询,数据量也不大,测试环境,大概只有1000条不到的数据,但是关联查询比较慢需要1.7s左右。通过执行explain +sql 发现联表查询并没有用到索引,而是全表扫描的,即便使用USE INDEX 命令给出对应的索引,索引也没被用到。找了很久的原因,最后发现问题出在两个表的字符集不同。差别在于一个用的utf8,一个用的utf8mb4。通过以下语句就可以对整个表的字符集进行转换。转了之后索引就会被正确的使用。查询速度以下快了很多查询时间只要1s不到。
ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;