MySQL优化小技巧

慢查询日志开启和存储

image.png

  • show variables like 'slow_query_log'(查询慢查询日志)

  • set global show_query_log_file='/home/mysql/sql_log/mysql-slow.log'(设置慢查询日志存储位置)

  • set global long_queries_not_using_indexes=on(将未使用索引的sql也记录到慢查询日志)

  • set global long_query_time=1(设置sql超过多少秒记录到慢查询日志)

慢查询日志内容

image.png

通过执行计划分析进行sql优化

image.png

sql优化

max()

比如一个sql select max(money) from pay,当进行查询时会进行全表扫描查出最大值,但如果我们给 money加一个索引,执行效率就会很快,因为这相当于一个覆盖索引,索引是顺序的,不需要进行扫描查找

count()

image.png

count(*) 会将列为空的也计算进去,count(release_year),直接指定哪个字段则不会将为空的列计算进去

子查询优化

通常是将子查询转化为 join 来查询,但要注意数据重复的情况

limit 查询优化

limit通常还会伴随order by 排序,所以在进行order by 排序字段时最好用加索引的字段或者主键

索引优化

如何选择合适的列创建索引

image.png

离散度就是指该列的不重复的值的多少,越多离散度越大,在联合索引中就应该放在前面

删除不用的索引和重复的索引

数据库表结构优化

选择合适的数据类型

范式化和反范式化优化

image.png

表垂直拆分

image.png

表水平拆分

水平拆分是为了解决单表数据量过大的问题,可以通过取模运算进行拆分,每个表的表结构是一样的,由此带来的问题就是查询和后台分析统计问题,可以统计时将表汇总统计,查询就应该考虑具体业务场景进行操作

系统配置文件优化

innodb_buffer_pool_size

image.png

innodb_log_buffer_size

image.png

innodb_flush_log_at_trx_commit

image.png

innodb_file_per_table

image.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值