mysql数据库索引原理及其经常使用引擎对比

索引原理

树数据结构及其算法简介

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算法,效率高 数据不安全
相关文章
相关标签/搜索