mysql优化

原文
一条sql执行很慢可能的原因,如何优化?

情况一

大多数情况下很正常,偶尔很慢
  • 数据库在刷新脏页,例如 redo log 写满了需要同步到磁盘。
  • 执行的时候,遇到锁,如表锁、行锁
  • sql写的烂

情况二

这条 SQL 语句一直执行的很慢
  • 没有用上索引或则索引失效:例如该字段没有索引;或则由于对字段进行运算、函数操作导致无法用索引
  • 有索引可能会走全表扫描

怎样判断是否走全表扫描:

索引区分度(索引的值不同越多,区分度越高),称为基数,而数据量大时不可能全部扫描一遍得到基数,而是采样部分数据进行预测,那有可能预测错了,导致走全表扫描

慢sql优化

  • 方式一:修改配置文件 在 my.ini 增加几行: 主要是慢查询的定义时间(超过2秒就是慢查询),以及慢查询log日志记录( slow_query_log)
  • 方式二:通过MySQL数据库开启慢查询:

对于MYSQL慢sql语句的优化,我们也可以分几个方面来进行分析(基本覆盖全面啦):

面试从这几方面考虑:索引+sql语句+数据库结构优化+优化器优化+架构优化。

  • 尽量覆盖索引,5.6支持索引下推

  • 组合索引符合最左匹配原则

  • 避免索引失效

  • 再写多读少的场景下,可以选择普通索引而不要唯一索引。更新时,普通索引可以使用change buffer进行优化,减少磁盘IO,将更新操作记录到change bufer,等查询来了将数据读到内存再进行修改.

  • 索引建立原则(一般建在where和order by,基数要大,区分度要高,不要过度索引,外键建索引)

总结

1、先设置慢查询(my.ini或数据库命令)

2、分析慢查询日志

3、定位低效率sql(show processlist)

4、explain分析执行计划(是否索引失效,用到索引没,用了哪些)

5、优化(索引+sql语句+数据库结构优化+优化器优化+架构优化)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值