1. 记录原因:mysql关联查询速度很慢,是由于字段字符集规则不一致所导致

  • 1.1 在一次线上的服务中,发现有几个关联查询速度特别慢,试过了多种优化方案,最后把问题定格在 count() 这个函数,由于是分页查询,所以肯定会有count()来去查询记录数,但是每次执行这个count()都会卡住好几秒
  • 1.2 最终发现 被关联的两个表 字符集规则不一致,一个是utf8_general_ci,另一个是utf8mb4_0900_ai_ci,具体原因可能是因为线上服务器和本地服务器的mysql版本不同导致的,在覆盖的时候出现了问题

2. 解决方案

# 查看各个字段的字符集规则:
show full columns from 表名;
# 修改字段的字符集:
ALTER TABLE 表名 CHANGE 字段名 字段名 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
# 修改表的默认字符集:
ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
# 查看数据库编码:
SHOW CREATE DATABASE db_name;
# 查看表编码:
SHOW CREATE TABLE tbl_name;

3. 具体操作

  • 这边我是一个字段一个字段的改 把两个表的字段都统一成了utf8_general_ci格式
ALTER TABLE 表名 CHANGE 字段名 字段名 varchar(255) 
CHARACTER SET utf8 COLLATE utf8_general_ci;
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐