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算法,效率高 数据不安全
posted @ 2017-11-15 16:55  陈贞  阅读(686)  评论(0编辑  收藏  举报