mysql优化


mysql优化,在我的了解下可以分为三种:
1:服务器层面的优化;
2:SQL设计层面的优化
3:SQL语句的优化

服务器层面的优化

1:你可以先看下你的buffer pool的使用率
show global status like ‘innodb_buffer_pool_pages_%’;
如果 Innodb_buffer_pool_pages_free | 0 | 0 就表示已经被用光
你可以适当的扩大buffer pool,理论上扩大到mysql内存的3/4 或者 4/5
这样可以最大限度的保证数据从内存读取而不是硬盘(内存和硬盘大家都懂得)

修改方式:
linux的my.cnf中增加innodb_buffer_pool_size = 设置值(带单位M/G)
重启mysql记得 修改配置文件,得重启
2:降低磁盘写入次数

 a:redo log大的话,落盘次数少(这个有时间,我会增加一篇mysql innodb的架构设计)
	 一般innodb_log_file_size 设置成 innodb_buffer_pool_size * 0.25就可以了
 b:通用查询日志、慢查询日志最好不开(生产上,你测试要用还是要开的)
	 bin-log得开呀,要不主从咋子办?
 c:可以更改检查点落盘策略innodb_flush_log_at_trx_commit 0 1 2 

3:从硬件上,提高磁盘读写
如果show profile中的 Sending data 大的不正常了,就要考虑这点了,毕竟脱离硬件谈软件,就是只想恋爱不想结婚呀!!!!!!!
4:内存预热
就是第一次查询会慢一点,但是第二次就会相对快一点

SQL层面的优化

1:设计统计表,对于实时性要求不高的需求,可以后台定时计算放入表中,查询的时候直接取
2:减少查询关联,创建合理的冗余字段------->别忘了修改数据的时候的数据一致性
3:字段太多的表,考虑拆表(这个是列拆,可不是行分)!
4:对于经常不适用的字段或者存储数据比较多的字段,考虑拆表,或者有字段是 blob 、text之类的,最好拆出去(这玩意得导致主键索引树多大呀)
5:每张表建议自己做int类型的主键,建议主键自增(分布式请雪花)

SQL语句优化

1:肯定不用说,是索引优化
where的字段中,组合索引,有没有按照最左前缀原则
执行计划一下,看看有没有索引下推
创建的组合索引,在查询的时候索引覆盖,不回表
on两边的字段都要创建索引
排序,分组使用索引列
不要使用*
2:limit优化(这个是在layer层,可以中断扫表)
3:小结果集关联大结果集
4:count优化

   count (*) 找普通索引 ,找到最小的那棵树来遍历 包含空值
   count(字段) 走缓存 不包含空值
   count(1) 忽略字段 包含空值

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值