mysql关联查询速度慢的问题及解决

 更新时间:2025年03月13日 15:31:52   作者:一个爱看综艺的程序猿  
这篇文章主要介绍了mysql关联查询速度慢的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql关联查询速度慢

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;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql处理海量数据时的一些优化查询速度方法

    mysql处理海量数据时的一些优化查询速度方法

    最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法,需要的朋友可以参考下
    2017-04-04
  • 通过sysbench工具实现MySQL数据库的性能测试的方法

    通过sysbench工具实现MySQL数据库的性能测试的方法

    sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试。这篇文章主要介绍了通过sysbench工具实现MySQL数据库的性能测试 ,需要的朋友可以参考下
    2019-07-07
  • 3种高效的Tags标签系统数据库设计方案分享

    3种高效的Tags标签系统数据库设计方案分享

    这篇文章主要介绍了3种高效的Tags标签系统数据库设计方案分享,现在主流的博客、CMS系统都有一个标签系统,本文就探讨它的数据库设计方式,需要的朋友可以参考下
    2014-07-07
  • Mysql分组查询取最新的几种方案总结

    Mysql分组查询取最新的几种方案总结

    在写报表功能时遇到一个需要根据用户id分组查询最新一条钱包明细数据的需求,下面这篇文章主要给大家总结介绍了关于Mysql分组查询取最新的几种方案,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Docker安装MySQL镜像的详细步骤(适合新手小白)

    Docker安装MySQL镜像的详细步骤(适合新手小白)

    本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,为读者展示了容器化MySQL的实践过程,需要的朋友可以参考下
    2025-05-05
  • MySQL 8.0升级中的字符集陷阱与解决方案

    MySQL 8.0升级中的字符集陷阱与解决方案

    在企业数字化转型的浪潮中,数据库系统的升级换代是必经之路,MySQL 8.0作为重要的里程碑版本,带来了诸多性能提升和新特性,但同时也埋下了一些技术地雷:字符集排序规则的变化,本文将基于一个真实案例,深度剖析MySQL 8.0字符集排序规则冲突问题的根本原因
    2026-01-01
  • innodb_index_stats导入备份数据时报错表主键冲突的解决方法

    innodb_index_stats导入备份数据时报错表主键冲突的解决方法

    下面小编就为大家带来一篇innodb_index_stats导入备份数据时报错表主键冲突的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Linux系统下mysql的彻底卸载步骤

    Linux系统下mysql的彻底卸载步骤

    MySQL是一款常用的关系型数据库管理系统,但是在使用过程中,有时候需要卸载MySQL,有些用户在卸载MySQL时会遇到一些问题,这篇文章主要给大家介绍了关于Linux系统下mysql的彻底卸载的相关资料,需要的朋友可以参考下
    2024-07-07
  • MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)问题的解决

    MYSQL ERROR 1045 (28000): Access denied for user (using pass

    Mysql中添加用户之后可能出现登录时提示ERROR 1045 (28000): Access denied for user的错误.
    2009-07-07
  • MySQL操作数据库实战指南

    MySQL操作数据库实战指南

    这篇文章主要给大家介绍了关于MySQL数据库操作库的相关资料,MySQL数据库是一个关系型数据库管理系统,所采用的SQL语言是用于访问数据库最常用的标准会语言,需要的朋友可以参考下
    2023-07-07

最新评论