五个方面搞定MySQL优化

一、背景

最近在网上看了很多关于SQL优化的文章,参考这些文章和《深入浅出MySQL》一书,做一个总结(结尾有图,大致总结出了五个方面)

后期会持续优化这篇文章

二、一些配置或者函数的解释

// 1.开启慢查询日志:
slow_query_log=1
// 2.
show status like 'Com_%';
Com_select:执行 select 操作的次数,一次查询只累加 1。
Com_insert: 执行 INSERT 操作的次数, 对于批量插入的 INSERT 操作, 只累加一次。
Com_update:执行 UPDATE 操作的次数。
Com_delete:执行 DELETE 操作的次数。

// 3.让mysql给出合适的字段长度(大致意思)
SELECT * FROM tbl_name PROCEDURE ANALYSE();
SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256);

// 4.分区

三、五个方面总结MySQL优化

(1)设计方面

  1. 在遵循三大范式的基础上适当的冗余:这里需要了解三大范式的概念
  2. 使用合适的数据类型,定义合适的长度
  3. 尽量使用not null,因为null数值计算逻辑比较复杂;

(2)SQL语句方面

  1. 慢查询日志;
  2. 优化where后边的条件,避免全表扫描;like,>=,not in 等
  3. explain 查看sql执行情况;
  4. 批量导入的时候:
    1. 先禁用索引,导入后重新建索引
    2. 批量插入,手动提交事务
  5. 避免使用select *;

(3)索引层面

这里边大家可以自由发挥,哈哈

(4)mysql服务层面(配置调整)

  1. 选用合适的存储引擎,innodb和MyISAM;
    1. 读多写少用MyISAM;
    2. 读多写也多用Innodb;
  2. 查询缓存
    1. query_cache_type
      1. 0或者off:关闭缓存
      2. 1或者on:开启缓存(使用SQL_NO_CACHE提示的SELECT语句除外)
      3. 2或者demand (只有显示指定SQL_CACHE的查询语句才会缓存)
    2. query_cache_size:单位是M;
    3. reset_query_cache:重置缓存;
    4. 对数据表的改动会导致基于该数据表的缓存失效
  3. key_buffer_size:设置索引块缓存大小,只用于MyISAM
  4. table_cache:表示数据库用户打开表的最大数量;
  5. innodb_buffer_pool_size: 存储innodb引擎的表数据索引数据最大内存缓冲区大小
  6. 最大连接数。

(5)服务器和应用层面

  1. 应用层面采用缓存,减少mysql查询频率;
  2. 主从复制:这里需要了解主从复制原理;
  3. 读写分离
    1. WriteDatabase:写连接;
    2. ReadDatabase:读连接;
  4. 负载均衡搭建集群;
  5. 高可用:为单机服务提供一个冗余机
    1. 心跳检测
    2. 虚IP
    3. 主从复制
  6. 分区?不太了解
  7. 水平分割和垂直分割

以上就是我的总结,不太全,后期遇到一点补充一点吧,请各位大佬指正,加上配图(从网上找的):

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值