哈希表-不能范围检索
二叉查找树 BST-存在不平衡导致的检索性能降低的问题
红黑树,平衡树但是有“右倾”趋势
AVL树:平衡树,数据库查询数据的瓶颈在于磁盘 IO,一次磁盘 IO 只能取出来一个节点上的数据加载到内存里,需要减少磁盘 IO次数
-
b-树(b-树就是b树) 平衡树
多叉树,一个节点不止一个数据分段向下查询
B 树用作数据库索引有以下优点:
优秀检索速度,时间复杂度:B 树的查找性能等于 O(h*logn),其中 h 为树高,n 为每个节点关键词的个数;
尽可能少的磁盘 IO,加快了检索速度;
可以支持范围查找。
-
b+树
B 树和 B+树有什么不同呢?
第一,B 树一个节点里存的是数据,而 B+树存储的是索引(地址),所以 B 树里一个节点存不了很多个数据,但是 B+树一个节点能存很多索引,B+树叶子节点存所有的数据。
第二,B+树的叶子节点是数据阶段用了一个链表串联起来,便于范围查找。
选择b+树作为支持索引的底层数据结构!
索引
建表的时候Mysql 就会自动建立好主键 ID 索引树-
MyISAM 引擎:非聚集索引方式
Myisam 创建表后生成的文件有
frm:创建表的语句
MYD:表里面的数据文件(myisam data)
MYI:表里面的索引文件(myisam index)MyISAM 引擎把数据和索引分开了,一人一个文件,这叫做非聚集索引方式。他通过索引定位数据的地址,然后去数据文件中取数据。当我们为某个字段添加索引时,我们同样会生成对应字段的索引树,该字段的索引树的叶子节点同样是记录了对应数据的物理地址,然后也是拿着这个物理地址去数据文件里定位到具体的数据记录。
-
Innodb 引擎:聚集索引方式
Innodb 创建表后生成的文件有:
frm:创建表的语句
idb:表里面的数据+索引文件
聚集索引是可以直接找到数据。
而Innodb 引擎 B+树的叶子节点存储的是主键 ID 对应的数据,当我们为某个字段添加索引时,我们同样会生成对应字段的索引树,该字段的索引树的叶子节点存储的是主键 KEY!拿到主键 KEY 后,InnoDB 再会去主键索引树里找对应的数据
-
select执行中的索引操作