using b tree mysql_0103MySQL中的B-tree索引 USINGWHERE和USING INDEX同时出现

本文详细介绍了MySQL中的B-Tree索引,包括B-Tree的基本概念、B+Tree和B*-Tree的区别,以及InnoDB和MyISAM索引结构的差异。还探讨了索引的创建、类型和使用原则,如最左前缀原则、覆盖索引等,并分析了无法使用索引的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自博客http://www.amogoo.com/article/4

前提

1,为了与时俱进,文中数据库环境为MySQL5.6版本

2,为了通用,更为了避免造数据的痛苦,文中所涉及表、数据,均来自于MySQL官网提供的示例库employees,可通过 https://launchpad.net/test-db/employees-db-1/1.0.6 自行下载。

基本概念

Binary search(二分查找法,折半查找法):是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

(以上摘自 http://en.wikipedia.org/wiki/Binary_search_algorithm )

如下图:

1423463345816028327.png

B-tree(Btree、B树、B-树):指的是多路查找树,有别于二叉查找树(Binary Search Tree)、平衡二叉查找树(Balanced Binary Search Tree)。此处的B可理解成Balanced(注1)。

对于一颗M阶的树:

1,定义任意非叶子节点最多只有M个儿子;且M>2;

2,根节点的儿子数为[2, M];

3,除根节点以外的非叶子节点的儿子数为[M/2, M];

4,每个节点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)

5,非叶子节点的关键字个数=指向儿子的指针个数-1;

6,非叶子节点的关键字:K[1], K[2], …, K[M-1];且K[i] 

7,非叶子节点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;

8,所有叶子节点位于同一层;

如下图:

1423463345540022181.png

B+-tree(B+tree、B+树):也是多路查找树,为B-tree的变形,在B-tree的基础上将叶节点打通,加上指向兄弟节点的指针,形成双向链表。叶节点的打通,使得只需遍历叶节点就可以实现整棵树的遍历,而无需像B-tree一样必须回到根枝节点再访问叶节点,对应数据库中范围查询,大大提高了IO性能。此为MySQL的B-tree索引结构。如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值