**
索引介绍
**
查询复杂度:复杂度为1的有字典,测试复杂度采用的是悲观态度,例如查寻1到10中的某个数,就要做好查到10的准备,复杂度用O(n)表示
常规查询:一般为顺序查询,按照顺序,查询到结果为结束。
对于mysql任意一张表,常规使用查询方法也是顺序查;mysql为了优化查询,提出了索引概念
当用户创建索引的时候,mysql首先复制数据,完成一个新的Btree(平衡树)数据结构,mysql索引默认
用的时候b+tree结构
平衡树:
1、左树和右树高度相差不能高过1。
2、每个节点当做key和指针相互分割,指针指向子节点。
3、d表示数的宽度,除叶子节点之外,其他每个节点有[d/2,d-1]条数据,而且key从左到右从大到小排列。
4、在一个节点当做,第n个key,大于这个节点当做的第n+1根key。
5、所有的叶子节点必须在同一层次。
索引时候数据结构,可以加快我们查询的效率,但是创建索引需要复制数据,会占用资源。
使用索引的区间:当我们使用索引后,查询指定数据返回的数据是总数据的3%-5%我们认为是合适的。
少量数据不适合使用索引。
索引的设立
索引分类:
1、普通索引: 就是一个普通的索引,可以为空,可以重复。
alter table 表名 add index(coiumn);
2、唯一索引:可以为空,不可以重复。
alter table teacher add unique(column);
alter table teacher add column type unique;
3、主键索引:不可为空,不可以重复。
alter table teacher add primary key(column);
只要是主键就是索引
4、多列索引:跟普通索引类似,只是参数多了。
alter table teacher add index (column1,column2,column3);
使用索引:
1、少量数据不使用数据
2、查询次数少不使用数据
3、查询要携带索引字段,通常放在select之后第一个
4、索引提高了查询的效率,占有更多的资源