2020-10-15

MySQL索引-B+树

索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。

在这里插入图片描述
二叉查找树的特点就是任何节点的左子节点的键值都小于当前节点的键值,右子节点的键值都大于当前节点的键值。顶端的节点我们称为根节点,没有子节点的节点我们称之为叶节点。

b+树
# b是balance 平衡的意思
# 为了保证每一个数据查找经历的IO次数都相同
# 只在叶子节点存储数据
# 为了降低树的高度
# 叶子节点之前加入了双向连接
# 为了查找范围的时候比较快
聚集索引(聚簇索引)
全表数据都存储在叶子节点上 – Innodb存储引擎中的主键
非聚集索引(非聚簇索引)/辅助索引
叶子节点不存放具体的整行数据,而是存储的这一行的主键的值

索引的创建和删除
# create index ind_name on 表名(字段名);
# create index ind_name on 表名(字段名,字段2);
# drop index 索引名 on 表名

正确的使用mysql数据库
# 从库的角度
# 搭建集群
# 读写分离
# 分库
# 从表的角度
# 合理安排表与表之间的关系 :该拆的拆,该合的合
# 把固定长度的字段放在前面
# 尽量使用char而不是varchar
# 从操作数据的角度
# 尽量在where字段就约束数值到一个比较小的范围 : 分页
# where a between value1 and value2
# 尽量使用连表查询代替子查询
# 删除数据和修改数据的时候条件尽量使用主键
# 合理的创建和使用索引
# 创建索引
# 1.选择区分度比较大的列
# 2.尽量选择短的字段创建索引
# 3.不要创建不必要的索引,及时删除不用的索引
# 使用索引
# 1.查询的字段不是索引字段
# 2.在条件中使用范围,结果的范围越大速度越慢,范围小就快
# 3.like 'a%'命中索引,like '%a’不命中索引
# 4.条件列不能参与计算\不能使用函数
# 5.and/or
# and条件相连 有一列有索引都会命中
# or条件相连 所有列都有索引才能命中
* .联合索引
# create index mix_ind on 表 (id,name,email)
# 遵循最左前缀原则,且从出现范围开始索引失效
# select * from 表 where id = 123; 命中索引
# select * from 表 where id > 123; 不命中索引
# select * from 表 where id = 123 and name = ‘alex’; 命中索引
# select * from 表 where id > 123 and name = ‘alex’; 不命中索引
# select * from 表 where id = 123 and email = ‘alex@oldboy’; 命中索引
# select * from 表 where email = ‘alex@oldboy’; 不命中索引,因为条件中没有id
# select * from 表 where name=‘alex’ and email = ‘alex@oldboy’; 不命中索引,因为条件中没有id
# 7.条件中的数据类型和实际字段的类型必须一致
# 8.select字段中应该包含order by 中的字段
# select age from 表 order by age; 快
# select name from 表 order by age; 慢

了解
覆盖索引 : 查询过程中不需要回表
select id from 表 where id > 10000000;
select max(id) from 表 where id > 10000000;
select count(id) from 表 where id > 10000000;

索引合并 : 分别创建的两个索引在某一次查询中临时合并成一条索引 a=1 or b=2
执行计划 : explain select 语句 ;能够查看sql语句有没有按照预期执行,可以查看索引的使用情况,type等级
慢查询优化 :
# 首先从sql的角度优化
# 把每一句话单独执行,找到效率低的表,优化这句sql
# 了解业务场景,适当创建索引,帮助查询
# 尽量用连表代替子查询
# 确认命中索引的情况
# 考虑修改表结构
# 拆表
# 把固定的字段往前调整
# 使用执行计划,观察sql的type通过以上调整是否提高
mysql的慢日志
# 在mysql的配置中开启并设置一下
# 在超过设定时间之后,这条sql总是会被记录下来,
# 这个时候我们可以对这些被记录的sql进行定期优化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值