mysql b-tree索引_Mysql探索(一):B+Tree索引

a59bfac96be90edae222e8bce25941c4.png

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使用的结构有所不同。

f808c5022cf050b522dccdd22c85e08e.png图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

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

ee85e28a3e7e96dcd055b9090026592d.png

参考:


版权声明:本文为weixin_35875323原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。