版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/ca1m0921/article/details/89890599
数据库的基本知识了解之后,就要学习索引了。 说句实话,没学索引,我真的不敢说我 熟悉数据库。
Mysql 的数据存储结构:
每个数据页由7部分组成,每个数据页的用户记录依靠一个单向链表维护,数据页之间依靠一个双向链表维护。
索引 通过 添加 目录记录页,将无序的数据 变成有序的数据。
一篇文章可以解释的清清楚楚: MYSQL的索引
mysql的数据存储依靠 页 来存储。页分为 目录记录页和用户数据记录页。
通过 record_type 的值来区分。0:用户记录 1:目录记录 2: 最小记录 3:最大记录
也就是是个B+数的结构。B+树属于 平衡二叉树的一种,通过二分法来查询数据,效率极高。
索引分为 : 聚集索引 和 非聚集索引
聚集索引: 以主键作为索引的方式。维护一个B+树。叶子节点是 用户数据。
查询过程,通过最高级的 目录记录页开始 二分法查询,直到查询到 叶子节点,找到对应的主键的用户记录。
非聚集索引:以非主键作为索引的方式。也称为二级索引。
非聚集索引,维护一颗 非主键 的 B+树, 在查询某个用户记录时,通过 某个字段,比如 name,开始二分查找B+树,一层一层查找,直到叶子节点,此时找到的 是 name 和 id(主键) 的一个对应关系,而没有其他的用户数据。
此时 需要通过 查找到的 id 作为主键,到 主键的B+树,查询 记录,同样 二分法一层一层 查找 目录记录页,直到 用户数据页,找到 对应的用户记录。
联合索引:就是多个字段组成的索引。比如: c2 、c3字段。建立B+树的时候,先按照c2 排序,只要c2相等的时候,才按照c3 排序。
MyISAM 的索引方案
创建和删除索引 SQL语句