MySQL_9.B-数索引

1.定义:B-树是一类树,包括B-树、B+树、B*树等,是一棵自平衡的搜索树,它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点.

2.B-数产生的原因

当数据量非常大时,内存不够用,大部分数据只能存放在磁盘上,只有需要的数据才加载到内存中。

一般而言内存访问的时间约为 50 ns(纳秒),而磁盘在 10 ms (毫秒)左右

3.B-树和B+树的区别

(1)B+树内节点不存储数据,所有 data 存储在叶节点导致查询时间复杂度固定为 log(n)。

而B-树查询时间复杂度不固定,与 key 在树中的位置有关, 最好为O(1)。

(2)B+树叶节点两两相连可大大增加区间访问性,可使用在范围查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找。

(3)B+树更适合外部存储。由于内节点无 data 域,每个节点能索引的范围更大更精确

(4)在数据结构上:B树为有序数组+平衡多叉树,而B+树为有序数组链表+平衡多叉树

4.为什么 Mysql 使用B+树

(1)Mysql 是一种关系型数据库,区间访问是常见的一种情况,而 B-树并不支持区间访问(可参见上图),

而B+树由于数据全部存储在 叶子节点,并且通过指针串在一起,这样就很容易的进行区间遍历甚至全部遍历。

(2)B+树叶节点两两相连可大大增加区间访问性,可使用在范围查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找

(3)B+树的查询效率更加稳定,数据全部存储在叶子节点,查询时间复杂度固定为 O(log n)

(4)B+树更适合外部存储。由于内节点无 data 域,每个节点能索引的范围更大更精确

5.mysql B-Tree索引使用案例

(1)单列索引使用管理

语法:

复制代码
create index index_name on table_name(col_name);
alter table table_name add index index_name(col_name);

案例:

复制代码
use yzjtestdb;
create index yzjtest_m1_inx_name on yzjtestdb.yzjtest_m1(NAME);
alter table yzjtestdb.yzjtest_m1 add index yzjtest_m1_inx_tel(TEL);

查看已创建索引:

复制代码
show index from yzjtestdb.yzjtest_m1;

索引使用:

复制代码
explain select * from yzjtestdb.yzjtest_m1 where name = 'yzjtest30000010';
explain select * from yzjtestdb.yzjtest_m1 where tel = '13379855952';

索引删除:

复制代码
drop index yzjtest_m1_inx_name on yzjtest_m1;
drop index yzjtest_m1_inx_tel on yzjtest_m1;

(2)复合索引使用管理

语法:

复制代码
create index index_name on table_name(col_name1,col_name2);;
alter table table_name add index index_name(col_name1,col_name2);

案例:

复制代码
use yzjtestdb;
create index yzjtest_m1_inx_name_tel on yzjtestdb.yzjtest_m1(NAME,TEL);
alter table yzjtestdb.yzjtest_m1 add index yzjtest_m1_inx_name_tel(NAME,TEL);

查看已创建索引:

复制代码
show index from yzjtestdb.yzjtest_m1;

索引使用:

复制代码
explain select * from yzjtestdb.yzjtest_m1 where name = 'yzjtest30000010'
and tel = '13379855952';

索引删除:

复制代码
drop index yzjtest_m1_inx_name_tel on yzjtest_m1;
相关推荐
吴声子夜歌3 小时前
HTML——结构化微数据语言简介
前端·数据库·html
FYKJ_20103 小时前
springboot鲜花销售系统91056-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·mysql·django·课程设计
\光辉岁月/3 小时前
7.mybatisplus学习-条件构造器、插件、通用枚举、多数据源环境、MybatisX
数据库·oracle
承渊政道4 小时前
云电脑连接异地MySQL:星空组网配置、端口验证与登录排障
数据库·mysql·电脑·星空组网
yexianglunbai4 小时前
Redis 缓存详解:从原理到实战
数据库·redis·缓存
微信开发api4 小时前
基于WTAPI构建社群运营平台:自动拉群与会话承接链路设计
java·大数据·网络·数据库·微信·自动化
天空'之城4 小时前
单片机基础核心知识点汇总(四十六)
数据库·单片机·mongodb
冰暮流星4 小时前
mysql之索引结构
数据库·mysql
闲云自留地4 小时前
从结绳记事到 MySQL:数据库原理 + MySQL 基础一篇通
数据库·mysql
逃逸线LOF4 小时前
Redis快速入门
数据库·redis·缓存