索引(index| key)
索引一般有三种:下标,索引和目录(首页)
都为key—value 结构 根据key去找value
索引:是数据库内部维护得一套数据结构,专门用于搜索的数据结构。目标就是提升搜索速度(性能)
而数据库存储的数据主要是保存在硬盘上,维护得索引数据结构同样也保存在硬盘上。
硬盘上的数据是持久性的保存的,断电之后仍然存在。
如下图
索引的分类
由于存在不同的分类标准,所以比较乱
1.从使用场景(建立索引的时候看到的):
主键索引(primary):约束条件为永不重复且不为null
唯一键索引(unique):约束条件为唯一不重复但可以为null
普通索引(index/key):提供索引,上下文没有明确说明一般都指这个,没有其他约束作用,单纯提高效率
全文索引(full text):提供关键词后进行记录中搜索该关键词—>搜索引擎技术替代了
空间索引(special):地图软件,附近几公里查询等
2.从实现原理的角度:
首先我们了解搜索专用的数据结构与算法有哪些?
a.数组上的遍历搜索
b.有序数组上的二分搜索
c.搜索树|有用的是平衡搜索树:二叉平衡搜索树(AVL树,红黑树)B-树系列(多叉平衡搜索树)
R-树系列 空间搜索
d.哈希表
e.跳表
一般提供索引,没有特别指明,都是B+树索引、
只在Mysql中的InnoDB才做的分类,背后都是B+树
索引在workbench中位置
右键点击表名选择Alter table或者点这个
这里设置索引类别
有无索引的区别
1.有索引的插入慢 因为还要插入索引数据
2.有索引的占用空间更大
3.有索引的查询速度更快 O(n)—> O(log(n))
那么什么时候考虑添加索引?
1.数据量达到一定地步
2.数据的查询次数远大于修改次数