Mysql探索(一):B+Tree索引

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:  MySQL是目前业界最为流行的关系型数据库之一,而索引的优化也是数据库性能优化的关键之一。所以,充分地了解MySQL索引有助于提升开发人员对MySQL数据库的使用优化能力。

 MySQL是目前业界最为流行的关系型数据库之一,而索引的优化也是数据库性能优化的关键之一。所以,充分地了解MySQL索引有助于提升开发人员对MySQL数据库的使用优化能力。
MySQL的索引有很多种类型,可以为不同的场景提供更好的性能。而B-Tree索引是最为常见的MySQL索引类型,一般谈论MySQL索引时,如果没有特别说明,就是指B-Tree索引。本文就详细讲解一下B-Tree索引的的底层结构,使用原则和特性。
为了节约你的时间,本文的主要内容如下:

  • B-Tree索引的底层结构
  • B-Tree索引的使用规则
  • 聚簇索引
  • InnoDB和MyISAM引擎索引的差异
  • 松散索引
  • 覆盖索引

B-Tree索引

 B-Tree索引使用B-Tree来存储数据,当然不同存储引擎的实现方式不同。B-Tree通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同,图1展示了B-Tree索引的抽象表示,由此可以看出MySQL的B-Tree索引的大致工作机制。

 B-Tree索引的底层数据结构一般是B+树,其具体数据结构和优势这里就不作详细描述,图1展示了B-树索引的抽象表示,大致反应了MyISAM索引是如何工作的,而InnoDB使用的结构有所不同。

图1 B-Tree索引的底层结构示意图图1 B-Tree索引的底层结构示意图

 MySQL可以在单独一列上添加B-Tree索引,也可以在多列数据上添加B-Tree索引,多列的数据按照添加索引声明的顺序组合起来,存储在B-Tree的页中。假设有如下数据表:
sql CREATE TABLE People ( last_name varchar(50) not null, first_name varchar(50) not null, birthday date not null, gender enum('m','f') not null key(last_name, first_name, birthday) ); ¨G0G mysql>SELECT * FROM tb1 WHERE b BETWEEN 2 AND 3; ¨G1G mysql> EXPLAIN SELECT actor_id, MAX(film_id) -> FROM sakila.film.film_actor -> GROUP BY actor_id; ********************************************* 1. row *********************************** id: 1 select_type: SIMPLE table: film_actor type: range possible_keys: NULL key: PRIMARY key_len: 2 ref: NULL rows: 396 Extra: Using index for group-by ¨G2G mysql> EXPLAIN SELECT store_id, film_id FROM sakila.inventory *********************************1.row*************************************** id:1 select_type:SIMPLE table:inventory type:index possible_keys:NULL key:idx_store_id_film_id key_len:3 ref:NULL rows:4673 Extra:Using Index

订阅最新文章,欢迎关注我的微信公众号

参考:

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
26天前
|
存储 关系型数据库 MySQL
MySQL - 索引类型详解
MySQL - 索引类型详解
|
26天前
|
存储 关系型数据库 MySQL
深入理解MySQL索引:从原理到最佳实践
深入理解MySQL索引:从原理到最佳实践
51 0
|
1月前
|
存储 关系型数据库 MySQL
Mysql高可用|索引|事务 | 调优
Mysql高可用|索引|事务 | 调优
|
11天前
|
SQL 存储 关系型数据库
MySQL索引(二)索引优化方案有哪些
MySQL索引(二)索引优化方案有哪些
30 0
|
26天前
|
存储 关系型数据库 MySQL
MySQL - 聚簇索引和非聚簇索引
MySQL - 聚簇索引和非聚簇索引
|
26天前
|
存储 SQL 关系型数据库
MySQL - 深入解析MySQL索引数据结构
MySQL - 深入解析MySQL索引数据结构
|
1天前
|
SQL 关系型数据库 MySQL
MySQL索引与事务
MySQL索引与事务
|
1天前
|
存储 SQL 关系型数据库
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
18 0
|
1天前
|
监控 关系型数据库 MySQL
MySQL创建索引的注意事项
在索引的世界中,权衡是关键。权衡读写性能,权衡索引的数量和类型,权衡查询的频率和数据分布。通过谨慎的设计、定期的维护和持续的监控,我们能够确保索引在数据库中的角色得到最大的发挥,为应用提供更加高效和可靠的数据访问服务。在数据库优化的旅途中,索引是我们的得力助手,正确使用它将使数据库系统更具竞争力和可维护性。
8 0
|
3天前
|
SQL 关系型数据库 MySQL
京东三面:什么情况会导致 MySQL 索引失效?
为了验证 MySQL 中哪些情况下会导致索引失效,我们可以借助 explain 执行计划来分析索引失效的具体场景。
18 0

推荐镜像

更多