1.索引
1)索引概念
索引 :好比书的目录,是为了加快查找的效率,如果数据库中没有索引,此时查找的时候就需要把整个表都遍历一遍,就有点像“顺序表查找”,针对数据库进行查找,数据库在磁盘上,磁盘访问速度很慢,并且数据量也可能非常多,那么这个查找速度就很慢。索引就是为了避免数据库进行顺序查找,提高查找效率。
2)索引底层可以采用的数据结构
1.二叉树(二叉搜索树):中序遍历结果是有序的,假如说需要查找id<6 并且id>3的,就可以先找到id为6的元素,再找到id为3的元素,中序遍历3和6之间的结果就是想要的结果。
如果再比较平衡的情况下,查找效率就是O(logN)
缺点: 1.二叉树每个节点最多有两个分支子节点,当数据量比较大的时候,树的深度就会很高,这样操作效率也较低。 2.二叉搜索树直接获取到中序遍历不是很高效。
2.哈希表 :查找效率是O(1)
缺点: 用哈希表只能用于相等的情况,不能处理其他逻辑,也不能处理范围查找。
3.B 树(真是的索引结构——N叉搜索树) 首先,需要了解一下B树(也就是B-树) B树:
和二叉树的差异有: 1.每个节点不是2叉了,而是N叉 2.每个节点不是存一个数据了,而是可以存多个数据 3.度 = 存的数据个数 1
B 树
和B树相比,主要是两个方面发生变化 1.每一层元素之间都链接到了一起 2.数据旨在叶子节点上保存,非叶子节点上只保存一些辅助查找的边界
优势: 1.仍然是N叉树,深度不会很高 2.查找任何一条数据的速度都是比较平均的,不会出现效率差异大的情况 3.直接遍历链表就可以得到中序排列 4.叶子节点适合大数据磁盘存储,非叶子节点适合用内存存储,可以降低访问磁盘的次数
3)索引作用
1.加快查找效率,减慢插入、删除、修改的效率。 2.索引也会占用一定的磁盘空间和内存空间(空间换时间) 3.给具体表中的每一列来加索引的时候,加在主键上的索引和加在其他列上的索引不同
4)索引应用场景
主要用在查找很频繁,但是插入、删除、修改都不频繁的场景
5)索引的使用
创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)(关联到哪个列就在哪个列建立索引)时,会自动创建对应列的索引。
a.查看索引:
show index from 表名;
b.创建索引:
create index 索引名 on 表名(字段名);
例:create index idx_classes_name on classes(name);
c.删除索引: (主键的索引不能删)
drop index 索引名 on 表名;
例如:drop index idx_classes_name on classes;