mysql热块争用_MySQL性能优化

MySQL性能优化数据库层面:应用系统层面优化SQL优化SQL优化一般通过分析慢查询日志来抓取长事务高消耗的sql,通过结合具体业务,对sql逻辑进行分析and精简,or重写sql。通过配置slow_query_log=1和log_queries_not_using_indexes=1启动慢查询日志记录和记录下没有使用索引的查询,后者会让慢查询日志文件很快膨胀,需要定时对文件进行切割。分析慢日志的...
摘要由CSDN通过智能技术生成

MySQL性能优化

数据库层面:

应用系统层面优化

SQL优化

SQL优化一般通过分析慢查询日志来抓取长事务高消耗的sql,通过结合具体业务,对sql逻辑进行分析and精简,or重写sql。通过配置slow_query_log=1和log_queries_not_using_indexes=1启动慢查询日志记录和记录下没有使用索引的查询,后者会让慢查询日志文件很快膨胀,需要定时对文件进行切割。分析慢日志的工具一般使用pt工具包的pt-query-digest或者mysql自带的mysqldumpslow,个人比较倾向用pt,分析出来的内容比较详细。需要注意pt-query-digest其实是一个perl脚本,如果慢日志文件较大(几G多),需要大量消耗CPU资源。建议在业务低峰时候调度该工具。

索引优化

索引是数据库最为常见的对象。基本上90%的sql性能问题都是没有建索引or低效索引导致的。所以根据实际业务场景建合适的索引,能够使得sql优化事半功倍。

索引的设计规则:选择唯一性索引or主键;为经常需要排序、分组和联合操作的字段建立索引,尽量建立复合索引而非单列索引;为常作为查询条件的字段建立索引;限制索引的数目;尽量使用数据量少的索引;尽量使用前缀来索引;删除不再使用或者很少使用的索引。

创建索引的一些注意事项:

(1)避免在where子句中使用!=或者<>操作符,否则引擎会放弃索引而进行全表扫描

(2)避免在where子句中使用or来连接条件,考虑用union代替。

(3)避免在where子句中对字段进行表达式操作或者函数操作

(4)先应考虑在 where 及 order by 涉及的列上建立索引

(5)在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件 时才能保证系统使用该索引, 否则该索引将不被使用,并且应尽可能的让字段顺序与索引顺序相一致。即最左原则。

(6)索引固然可以提高相应的 select 的效率,但是也需要成本去维护索引,因此表的索引个数并非越多越好,一般不要超过7个。

(7)如果使用到了临时表,在最后将所有的临时表显式删除时,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。

(8)避免频繁创建和删除临时表,以减少系统表资源的消耗。对于一次性事件, 最好使用导出表。

(9)最好不要给数据库留NULL,尽可能的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值