Mysql系列之性能优化

本文主要探讨MySQL性能优化,包括设计原则如选择InnoDB引擎、合理数据类型选择、索引优化,尤其是B+树和哈希索引的使用,以及查询语句优化和分区表的应用。通过理解索引原理,避免不走索引的操作,可以显著提升查询效率。
摘要由CSDN通过智能技术生成

一、设计

1、表引擎尽量使用InnoDB,除非有其它特定功能需求才使用其它表引擎。
2、字段数据类型,MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。更小的通常更好,例如varchar(5)和varchar(100)都能满足,那么坚决使用更小的那个;数字要用数字类型,尽量不要用字符串;有时候可以使用枚举列代替常用的字符串类型。
3、列与表关联,表设计中不要有太多的列,表关联数量最好不要超过3个。
4、范式和反范式,表设计不一定完全遵守三大范式,有时候需要反范式,例如有时需要添加冗余字段简化业务与查询。
5、缓存表和汇总表,如果在数据库层面优化比较麻烦,可以考虑在业务层面优化,考虑加入缓存表与汇总表,特别是一些统计功能,有时候这样能简化业务,效率更高。

二、索引

当表中的数据量越来越大时,就要考虑建索引了,索引优化应该是对查询性能优化最有效的手段了。Mysql中,最常见的有B+树索引和哈希索引。

1、B+树索引

InnoDB表引擎默认使用B+树索引,B+树索引适合范围:精确查找、范围查找、前缀查找
精确查找就是值等于(=)的查找;范围查找是<、<=、>、>=查找;前缀查找是以字符开头的查找。

  • 单列索引
    只有一个字段的索引。

  • 联合索引
    包含多个字段的索引,联合索引遵循最左侧原则,意思是where 后面带的条件字段要有最左边的字段,否则不走索引,例如:a,b,c三个字段组成的索引,where 条件后面要包含a字段。

  • 索引操作

创建索引:
alter table tb_name add index 索引名称 (列名);
在这里插入图片描述

删除索引:
alter table tb_name drop index 索引名称;
在这里插入图片描述

查看索引:
show index from tb_name;
在这里插入图片描述

  • 查看sql语句执行计划
    sql 执行语句前面加上explain关键字就可以查看执行计划,这样就能判断sql 语句走没走索引。
    在这里插入图片描述

  • 要注意不走索引的情况
    现有一张预警日志表,建立一个包含三个字段的联合索引,最左侧是create_time字段。
    在这里插入图片描述

1、不遵循最左侧原则。
在这里插入图片描述

2、模糊查找不走索引,像 where grade like ‘%1208%’,但 grade like '1208%'这样以字符串开头却会走索引。

3、索引列参与计算,不走索引

SELECT * FROM student WHERE age+10=30;<
  • 36
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新之助Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值