1.什么是索引
1.1 维基百科定义:
数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,以协助快速查询、更新数据库表中数据。
1.2 关于索引的理解:
首先数据是通过文件存放在磁盘上的,数据库表中的每一行数据都是有一个地址与其对应,没有索引,如果表中500万条数据,那么检索一条数据,需要遍历500万条数据;但是有了索引就可以去索引表中检索这条数据的地址(索引是一种可以快速检索的数据结构,B+树),可以对比成字典查字的过程;
1.3 如何创建一个索引:
innodb索引类型有三种: 普通索引 , 唯一索引(主键索引是一种特殊的唯一索引), 全文索引
普通索引(normal): 普通的索引类型,没有任何限制 ;
唯一 (unique) : 要求键值不能重复;主键索引还要求键值不能为空(使用primary key创建唯一索引);
全文(fulltext): 针对比较大的数据,类如消息内容,数据大小有几kb这种情况,使用like查询,效率非常的低,可以创建全文索引;注意:只能是文本类型的 ,char,varchar , text才能创建全文索引;
-- 创建全文索引createtable m3 ( name varchar(50),fulltext index(name));--全文索引使用select*from fulltext_test where match(content) against('哈哈'IN NATURAL LANGUAGE MODE);
2.索引存储模型
2.1 二分查找:
2.1.1概念:
二分查找的一种思想,也叫折半查找,每一次,我们都把候选数据缩小了一半。如果数据已经排过序的话,这种方式效率比较高。
2.1.2优缺点:
优点:有序数组查询效率和比较查询效率高
缺点:更新数据存在问题
2.1.2 : 解决上述问题提出了,有没有可以使用二分查找的链表
2.2 二叉查找树(BST)
2.2.1:二叉查找树的特点:
所有左子树的节点小于右子树的节点,右子树的所有节点大于左子树,投影到平面上就是一个有序的线性表
2.2.2:优缺点
优点:可以实现快速查找,也能实现快速插入
缺点:二叉树的查找和这个树的深度有关,最坏情况回退回到O(n)
如果存在一列数字是斜树那么就相当于是一个链表,因为不够平衡导致,导致树的深度过大;引入平衡二叉树(AVL树)
2.3平衡二叉树(左旋,右旋)
2.3.1:左右子树的深度不能超过1
2.3.2:通过左旋和右旋将一个不平衡的树,转化为平衡二叉树
2.3.3:在平衡二叉树上,一个节点,他的大小是一个固定的单位,平衡二叉树作为索引怎么检索数据呢?
应该存储如下的数据:
A:索引的键值,例如在id上创建一个索引,我们使用where id = 1 的条件时,就会找到索引里id这个键值;
B:数据存储的地址,索引的作用就是查询数据存放的地址
C:因为时二叉树,索引还应存储左右子节点的引用,这样才能找到下一个节点,比如大于26在右边查找,一次向下查找,直到找到