MySql 性能优化

缓存清除

  1. 命令
reset query cache;

explain命令

  1. type
    system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL,一般来说
    得保证查询至少达到range级别,最好能达到ref。
  2. key
    若为null,表示没用索引
  3. rows
    只要row足够小,则不会慢

Profiler性能工具

  1. 开启
show variables like '%profili%';
profiling   ON          //OFF 表示关闭,NO 表示开启
SET profiling = 1; #开启profiling功能
set session profiling=1
  1. 使用
show profiles;#显示记录的profile列表
show profile for query 404#显示指定的profile

运行结果如下
这里写图片描述

踩坑处理

  1. 关联字段
    表关联时候,相同字段采用同编码、同类型才能使用索引,否则隐式转换,无法使用索引
  2. 左关联/右关联
    能放在on后面的条件,全部放在on,里面,where在on后面执行,放在where会导致运算的数据量大,影响性能
  3. limit
    mysql中limit的基本算法为查到对应的数据后进行分页,如果是limit 10000,10;则会查询10000条数据,适合采用延迟关联的写法,例子如下
SELECT * FROM cms_discovery_nicegoods_single_recommend a JOIN (select id from cms_discovery_nicegoods_single_recommend limit 500000, 20) b ON a.ID = b.id

select * from cms_discovery_nicegoods_single_recommend a , (select id from cms_discovery_nicegoods_single_recommend  limit 500000,20) as b where a.id = b.id
  1. %模糊查询
    代码中禁止左边出现%,因为会出现全表扫描。
  2. %避免负向查询
    负向查询条件:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等,会导致全表扫描

show global status(命令解析)

        show global status like 'table_locks%'; 锁表情况
        show global status like 'handler_read%'; 表扫描情况
        show global status like 'created_tmp%';  临时表
        show variables like ‘key_buffer_size’; key_buffer_size是对MyISAM表性能影响最大的一个参数
        show variables like '%slow%';  慢查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值