索引的选择

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()”)

特点:高效

 

原文地址:https://www.cnblogs.com/excellencesy/p/9117498.html