《mysql篇》--索引事务
索引
索引的介绍
索引是帮助MySQL高效获取数据的数据结构,是一种特殊的文件,包含着对数据表里所有记录的引用指针,因为索引本身也比较大,所以索引一般是存储在磁盘上的,索引的种类有很多,不过如果没有特殊说明,我们一般认为索引是一个B+树的结构。
索引的作用
优势:
- 可以提高列检索的效率,降低搜索成本。
- 对提高数据库的性能有很大的作用。
- 通过索引对数据进行,排序也可以大大提高排序效率
- 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
劣势:
- 会占用磁盘空间
- 有时可能会比较危险,在创建索引时需要对现有的数据,进行大规模的从新整理(调整存储的数据结构),如果当前是一个空表,或者数据不多,创建索引一般没有什么问题,如果这个表本来就很大,此时创建索引就需要对所有数据进行重新调整结构,重新存储,就有可能把服务器给卡住,一般来说,创建索引都是在创建表时就规划好的。
索引的使用
查看索引
show index from 表名;
举例:
create table demo( id int primary key, age int, name varchar(20)); show index from demo;
创建索引
create index 索引名字 on 表名(列名);
举例:
create index index_id on demo(id); show index from demo;
//这里的举例只是为了讲解
删除索引
drop index 索引名 on 表名;
drop index index_id on demo; show index from demo;
//主键,unique,外键都是会自动生成索引的
索引内部的原理和逻辑
如果没有特殊说明,我们一般认为索引是一个B+树的结构。
二叉搜索树
博主在之前的博客中有详细讲解过二叉搜索树,如果有兴趣可以去看看。
B树
在将B+树之前我们要先了解一些B树,B树又叫多路平衡查找树,他并不是一棵二叉树,而是一棵多叉树,每个结点有M个子节点,M称为B树的阶,
B树的特点包括:
- 每个节点可以有多个子节点,这使得B树能够优化大块数据的读写操作。
- B树的所有叶子节点都在同一层,保持了树的平衡。
- B树中的关键字从小到大排列,每个结点上有M个key,划分出M+1个区间
- 叶子节点不包含关键字,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。
每个结点可以看作是一个区间,从无穷小到无穷大,每一个关键字都会将这个区间划分,每个小区间又可以向下延申出子结点,又或者说每个结点里所包含的关键字大小,都在其对应的父结点,的相应的小区间里
举例:查找7
首先从根结点开始,7比10小,所以在10左边的区间,然后继续查找比较,7比3大,在3右边的区间,继续查找比较,在这个结点中可以查找到7,查找结束。
进行查询的时候,就可以直接从根结点出发,判定当前要查找的数据在节点上的哪个区间,决定下一步往哪里走,进行添加/删除元素可能会涉及到结点的拆分和结点的合并
//B树可以有效的减少访问硬盘的次数,从而大大提高检索的性能
B+树
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。