1,什么是索引:
索引就是帮助DBMS高效检索数据的数据结构
2,索引分类
(1)普通索引:允许重复的值出现
(2)唯一索引:除了不允许重复的记录以外,其他和普通索引一样
(3)主键索引:给主键所在的列设置索引
(4)全文索引:用来对表中的文本域(char,varchar,text)设置索引
3,使用索引的弊端
(1)占用空间
(2)对dml(drop,modify,Insert)操作有影响,变慢
4,索引的使用场景
(1)在where条件中经常使用(如果不做查询就没有意义)
(2)字段的内容不是固定的几个值
(3)字段的内容不会频繁改变
5,举例说明
在1,2 ,3 ,3 ,4,2,3,4,5这些数中查找‘2’;
不加索引时:会从第一个数检索到最后一个数,把两个2 找出来
加索引时:会在排好序的数列“1,2,2,3,3,3,4,4,5”中从头找直到第一个3(2后面的一个数)为止
可见加索引比不加索引效率要高
6,索引实现原理
(1)btree(Balance Tress)索引:通过建立平衡树实现排序,利用平衡树加快查询速度【时间复杂度是平衡树的高度】
(2)hash索引(被应用于Memory搜索引擎):底层是crc16算法,由这个算法生成唯一的值完成hash索引
Memory搜索引擎:内存数据表搜索引擎(电脑重启数据就会丢失)
hash函数根据id(索引列)返回保存map<hash值,list<行指针>>,返回一个地址(map的物理地址)
返回的地址可能会发生冲突:不同的id返回相同的地址
他是采用链表来解决冲突
在查找的时候:hash函数根据id获取map的地址,在map中获取所需要的值
所以在理论上(不发生冲突的情况下)时间复杂度为O(1),就是只查找1次
7.memory搜索引擎的缺点:
(1)会发生地址冲突,一旦发生地址冲突,代价就会增加,
(2)具有局限性,只能用于等值比较,不可以用于范围查找(“=”,“<=",">=”,“in()”)
特点:高效