Mysql高级篇——索引

索引

索引(Index)是帮助MySQL高效获取数据的数据结构
优点

  • 1)降低 数据库的IO成本,数据库每一次遍历都是对磁盘进行IO读取。
  • 2)通过创建唯一索引,可以保证数据库表中每一行 数据的唯一性
  • 3)可以 加速表和表之间的连接 。换句话说,对于有依赖关系的子表和父表联合查询时, 可以提高查询速度。
  • 4)可以显著减少查询中分组和排序的时 间 ,降低了CPU的消耗,因为只要添加了索引就会先排序好。

缺点

  • 1)创建索引和维护索引要 耗费时间
  • 2)索引需要占 磁盘空间 ,innodb 存储在.idb文件里 myisam存储在MYI文件里
  • 3)会 降低更新表的速度 。当对表 中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度,在我们插入和删除的时候,页与页之间的记录移动。
    Mysql高级篇——索引_第1张图片
  • record_type :记录头信息的一项属性,表示记录的类型, 0 表示普通记录、 2 表示最小记录、 3 表示最大记录、 1 表示目录项记录,下面讲。
  • next_record :记录头信息的一项属性,表示下一条地址相对于本条记录的地址偏移量,我们用 箭头来表明下一条记录是谁。 或者说下一个页是谁。
  • 各个列的值 :这里只记录在 index_demo 表中的三个列,分别是 c1 、 c2 和 c3 。
  • 其他信息 :除了上述3种信息以外的所有信息,包括其他隐藏列的值以及记录的额外信息。

Mysql高级篇——索引_第2张图片
Mysql高级篇——索引_第3张图片
目录项记录 和普通的 用户记录 的
不同点:
目录项记录 的 record_type 值是1,而 普通用户记录 的 record_type 值是0
目录项记录只有 主键值和页的编号 两个列,而普通的用户记录的列是用户自己定义的,可能包含 很 多列 ,另外还有InnoDB自己添加的隐藏列。
了解:记录头信息里还有一个叫 min_rec_mask 的属性,只有在存储 目录项记录 的页中的主键值
最小的 目录项记录 的 min_rec_mask 值为 1 ,其他别的记录的 min_rec_mask 值都是 0 。
相同点:两者用的是一样的数据页,都会为主键值生成 Page Directory (页目录),从而在按照主键
值进行查找时可以使用 二分法 来加快查询速度。

Mysql高级篇——索引_第4张图片
Mysql高级篇——索引_第5张图片
Mysql高级篇——索引_第6张图片
我们用到的B+树都不会超过4层,那我们通过主键值去查找某条记录最多只需要做4个页面内的查找(查找3个目录项页和一个用户记录页),又因为在每个页面内有所谓的 Page Directory(页目录),所以在页面内也可以通过二分法实现快速定位记录。

你可能感兴趣的:(Mysql,数据库)