B+树(5)myISAM简介 --mysql从入门到精通(十七)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: B+树(5)myISAM简介 --mysql从入门到精通(十七)

上篇文章我们说了,联合索引会用两个以上列来创建索引,b+树是一颗,先用c2列排序,若结果相同,则用c3排序。innoDB的b+树特点是根节点保持不变,新表是先默认有聚簇索引,先有一个没有数据的根目录节点,放用户记录数据放入根几点中,当数据慢了,页分裂,会有多的节点,此刻根节点进化成根目录记录节点,数据存入底层节点。二级索引的内节点保证一致性,存入列值的时候加个主键。

B+树(4)联合索引 --mysql从入门到精通(十六)


myISAM简介


我们知道了innoDB搜索引擎的是索引即是数据,分为列表值索引树,和聚簇索引树,聚簇索引那颗b+树索引即是数据,所有的用户记录数都存在叶子节点。而myISAM虽然也是B+树,但索引和数据是分开的。


myISAM会吧用户记录数据全部放在一个文件里,称为数据文件,这个文件不会划分若干页,有多少记录就往里面塞,通过每一行对应的行号快速访问,因为随意塞入,不会按主键大小排序,不能用二分查找法查找。


之后会吧索引信息存储到另一个索引文件里,myISAM会单独为表的主键创建索引,只不过在叶子节点存储的不是用户记录数据,而是主键+行号,意味着找到到对应行号之后,会用行号去数据文件里再次找全部数据。所以myISAM每次查询都是必须要回表的,相当于二级索引。(innoDB的聚簇索引是直接在根目录记录页根据主键找到对应的内节点,在找到对应的底层叶子节点上的全部数据)。


有需要的话,也可以建立二级索引或者联合索引,只是叶子节点存放的是列值+行号。


创建索引和删除索引:


说了那么多理论知识,那如何实战呢?mysql中的innoDB和myISAM表会自动为主键或者申明的为unique的列创建聚簇索引,但如果需要给其他列创建二级索引,则需要在sql里显示指明。为啥不自动创建呢,别忘了越多的索引意味着越多的b+树,意味着插入和删除都需要巨大的内存来维护b+树,很耗费性能。


建表的时候可以创建索引,index 和 key关键字都可以使用,指定indx_tb_col表的c2列为idx_c2名称的索引:

create table index_tb_col(
  c1 int,
  c2 int,
  c3 char(1),
  index idx_c2 (c2)
)row_format=Compact;

也可以在表创建完成之后,指定c3为idx_c3名称的索引:

mysql> alter table index_tb_col add index idx_c3 (c3);
Query OK, 0 rows affected (0.04 sec)

也可以添加联合索引和删除索引:

//复合索引
mysql> create table index_tb_col(
    -> c1 int,
    -> c2 int,
    -> c3 char(1),
    -> primary key (c1),
    -> index idx_c2_c3 (c2,c3)
    -> )row_format=Compact;
Query OK, 0 rows affected (0.03 sec)
//删除索引
mysql> alter table index_tb_col drop index idx_c2_c3;
Query OK, 0 rows affected (0.03 sec)
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
SQL 关系型数据库 MySQL
【MySQL技术内幕】5.6-B+树索引的使用
【MySQL技术内幕】5.6-B+树索引的使用
13 4
|
1天前
|
存储 SQL 关系型数据库
【MySQL技术内幕】5.4-B+树索引
【MySQL技术内幕】5.4-B+树索引
9 0
|
2天前
|
存储 关系型数据库 MySQL
MySQL基础指南:从入门到精通
MySQL基础指南:从入门到精通
|
6天前
|
存储 SQL 关系型数据库
Mysql简介
是由瑞典的Mysql AB公司开发的; 是Oracle旗下的一款产品; 是当下最流行的关系型数据库管理系统之一; 是web应用存储数据最好的DBMS之一; 是开源的,同时也是使用标准SQL语言操作数据库的; 二、使用数据库的好处 实现数据的持久化; 使用完整的管理系统来完成对数据的管理; 便于对数据的操作,例如:增删改查; 三、数据库的相关概念 DB:database的简称,用于存储数据的仓库,它采取了一系列有组织的数据;
10 4
|
8天前
|
存储 关系型数据库 MySQL
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
13 1
|
8天前
|
存储 安全 关系型数据库
|
8天前
|
SQL 安全 关系型数据库
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
14 1
|
18天前
|
存储 关系型数据库 MySQL
【MySQL】存储引擎简介、存储引擎特点、存储引擎区别
【MySQL】存储引擎简介、存储引擎特点、存储引擎区别
29 2
|
30天前
|
NoSQL 关系型数据库 MySQL
B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】
B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】
96 2
|
30天前
|
存储 SQL 关系型数据库
mysql中MyISAM和InnoDB的区别是什么
mysql中MyISAM和InnoDB的区别是什么
22 0