当前位置: 首页 > article >正文

MySQL查询慢的原因

        首先需要了解mysql 的查询流程,以我们的 Java 代码为例,Java 应用会带着账号密码尝试和 MySQL 建立网络连接,MySQL 的连接管理模块会对该连接进行管理,连接完成之后,Java 应用会对 MySQL数据库发送 sql 语句,MySQL 收到查询语句后,会在分析器中判断是否有语法错误,比如单词拼写错误等,接下来是优化器,它会根据一些规则来选择合适的索引,生成执行计划,执行器会调用存储引擎的接口函数,存储引擎是真正读写数据的地方。现在最常用的是innodb 存储引擎。由于磁盘读写数据比较慢,因此 innodb 内加了一层内存提速,叫做 buffer pool,里面既放行数据,也放索引数据,查询 sql 到达 innodb 中,会根据前面优化器里计算得到的索引去查询相应的索引页,如果索引页不在buffer pool 中,则先从磁盘加载索引页到 buffer pool 中,再通过索引页查询得到数据页的位置,如果这些数据页不在 buffer pool 中,则从磁盘加载到到 buffer pool,最后将得到的一行行数据返回给应用程序,根据上述流程可以总结以下三点:
1、 数据库慢查询,一般是优化器选错索引导致,这类问题可以通过 explain 命令排查,查看索引的命中情况。
2 、连接数不够,这个问题受到数据库和客户端两侧的影响,首先是MySQL的 连接数过小, 调整相应大小就行,数据库连接数是 100-16384;其次是应用端连接数过小,由于MySQL 和应用的连接是 tcp 长连接,连接比较耗时,因此一般会在应用端建立一个连接池,用来存放长连接,sql 语句查询时,先取出连接使用,用完再将连接放回去。如果说调整一侧没有效果,可以尝试调整双方。
3、buffer pool 太小,buffer pool存放数据页和索引页,因此buffer pool 越大,能存放的数据页也就越多,相应的 sql 查询时命中率也就越高,查询速度也就越快。


http://www.kler.cn/a/581812.html

相关文章:

  • MongoDB 触发器实现教程
  • 基于SpringBoot的复兴村医疗管理系统【Si获取源码】
  • PyTorch模型优化设计一个高效的神经网络架构实例
  • centos linux安装mysql8 重置密码 远程连接
  • Android12 应用更新开机动画
  • element tree树形结构默认展开全部
  • HTTP与HTTPS的深度解析:技术差异、安全机制及应用场景
  • 火语言RPA--PDF页数统计
  • 四种常见的 API 架构风格(带示例)
  • 前后端+数据库的项目实战--学生信息管理系统-易
  • Unity辅助工具_头部与svn
  • 【CXX】6.6 UniquePtr<T> — std::unique_ptr<T>
  • 深入理解 Rust 中的模式匹配语法
  • SpringBoot(1)——创建SpringBoot项目的方式
  • rom定制系列------小米note3 原生安卓15 批量线刷 默认开启usb功能选项 插电自启等
  • Java中数据库索引选择B+树而非红黑树的详细解析
  • DeepSeek引领端侧AI革命,边缘智能重构AI价值金字塔
  • Spring Boot中@Valid 与 @Validated 注解的详解
  • c++-------------------智能指针
  • 途游游戏25届AI算法岗内推