MySQL——索引

1、索引是什么

索引是数据库中帮助高效查询数据的排好序的数据结构

2、磁盘io的概念

mysql是以文件的形式存储的;

mysql的IO是指数据库文件的读写,也就是检索数据和插入数据。

磁盘io是非常耗时

 

索引结构分类

  • 二叉树(若插入的数据是按序递增,就会出现子节点全都在右边(单边增长)),无法提高查询效率
  • 红黑树[二叉平衡树](对于二叉树,红黑树做了数据节点平衡会自动的优化单边增长问题,但当数据量大的时候,红黑树的高度就会变得很大,大概是2的n次方,每次查找都要进行磁盘io,磁盘io是非常耗时的)
  • hash(经过hash运算能快速找到记录在磁盘上的位置,查询效率快,例:id=3  经过hash(3)就能通过映射直接找到磁盘中对应的地址,但不利于范围查找)
  • b树:b树和b+树的区别在于B树中同一键值不会出现多次,b树在非叶节点也放了data,
  • b+树[多路平衡树](MySQL最终使用b+树实现索引结构)

b+树:

MySQL——索引_第1张图片

b+树和红黑树不同的地方就是对节点进行横向扩展,能让一个节点能存储多些key(但数据量得适中,每次磁盘io需要快速,如果一次把大量的数据取出来会造成速度太慢和内存浪费)

# 查询单个节点的大小
show global status like 'Innodb_page_size';

MySQL 存储引擎指的是表

innodb

只有两个文件frm、idb文件。idb同时存储索引和数据。

聚集索引:

索引中键值的逻辑顺序决定了表中相应行的物理顺序(索引中的数据物理存放地址和索引的顺序是一致的),可以这么理解:只要是索引是连续的,那么数据在存储介质上的存储位置也是连续的。因为innodb索引叶节点上直接存数据,是聚集索引。

myisam

(1)*.frm--表定义,是描述表结构的文件。

(2)*.MYD--"D"数据信息文件,是表的数据文件。

(3)*.MYI--"I"索引信息文件,是表数据文件中任何索引的数据树。

非聚集索引

索引的逻辑顺序与磁盘上的物理存储顺序不同。非聚集索引的键值在逻辑上也是连续的,但是表中的数据在存储介质上的物理顺序是不一致的,即记录的逻辑顺序和实际存储的物理顺序没有任何联系。索引的记录节点有一个数据指针指向真正的数据存储位置。

 

innode一定需要主键的原因

   innodb是在叶节点上直接存储记录地址,索引需要唯一主键去维护数据,而myisam叶节点上只存了myi文件上记录映射的引用,所以无需唯一索引去维护。

你可能感兴趣的:(Mysql,mysql)