MySQL-性能优化

  • 慢查询
    • set GLOBAL slow_query_log=1;
    • `set global long_query_time=0;
    • set global log_output='FILE,TABLE'
    • mysqldumpslow -s r -t 10 slow-mysql.log
  • 优化SQL查询方法论
    • 查询不需要的记录
    • 重复查询相同的数据
    • 是否在扫描额外的记录:响应时间、扫描的行数、返回的行数
  • 重构SQL查询的方法论
    • 切分查询
    • 分解关联查询
  • MySQL执行全流程
    1. 客户端发送一条查询给服务器
    2. 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段(当然从MySQL8.0开始,这个部分就没有了)
    3. 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划
    4. MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询
    5. 将结果返回给客户端
  • MySQL客户端/服务器通信
    • 半双工:在任何一个时刻,要么是由服务器向客户端发送数据,要么是由客户端向服务器发送数据
    • 一旦一端开始发生消息,另一端要接收完整个消息才能响应它
      • 当客户端从服务器取数据时,看起来是一个拉数据的过程,但实际上是MySQL在向客户端推送数据的过程。客户端不断地接收从服务器推送的数据,客户端也没法让服务器停下来
    • 服务器端游标,每次从服务器取fetch_size条数据
      • setResultSetType(ResultSet.TYPE_FORWARD_ONLY); setFetchSize(Integer.MIN_VALUE)
      • statement#enableStreamingResults
      • useCursorFetch=true
  • show processlist 查看线程状态
  • show profile
    • set profiling=1;
    • show profile for query 1;
    • show profile all for query 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值