索引原理
树数据结构及其算法简介
B+/-树:
- 多路搜索树;
- 时间复杂度O(logdN);h为节点出度,d为深度
红黑树:
- 节点带有颜色的平衡二叉树
- 时间复杂度O(log2N);h节点出度=2
平衡二叉树:
- 绝对平衡二叉树,查找效率和红黑树基本同样
- 可是插入和删除的效率低于红黑书;
查找时间复杂度
上述数据结构,由于时间复杂度是O(logdN),因此d越大,效率上越低,
同时,红黑树在插入和删除的操做上有较高的效率,因此C++中Map就是红黑树实现的;
磁盘I/O操做
参考文章:MySQL索引背后的数据结构及算法原理[http://blog.codinglabs.org/articles/theory-of-mysql-index.html]
- 数据库的索引空间可能很大,因此在索引的数据可能会部分存储到磁盘空间;
- 根据O(logdN), B+/-树的d比平二叉衡树大,因此访问节点的数量就越小,能够减小IO读写;
- 有由于B+树内部节点去掉了data域,因此能够有更大的出度d,因此i/o会更少;
- 因此数据库在的索引使用 B+树实现;
索引类型
- 汇集索引:主键索引(一级索引);这种实现方式使得按主键的搜索十分高效
- 辅助索引(二级索引):须要检索两遍索引,首先检索辅助索引得到主键,而后用主键到主索引中检索得到记录。
MYSQL优化
- 结构优化:
- 查询优化:最左前缀原理
1.范围列能够用到索引(必须是最左前缀),可是范围列后面的列没法用到索引。同时,索引最多用于一个范围列,所以若是查询条件中有两个范围列则没法全用到索引。
2.查询条件中含有函数或表达式则不能使用索引
搜索引擎
InoDB |
事务,行级锁,支持失败恢复 |
不支持全文搜索 |
|
MyIsAM |
快速读取 |
表级锁,无事务,不支持失败恢复 |
|
MEMORY |
hash算法,效率高 |
数据不安全 |