zoukankan      html  css  js  c++  java
  • 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算法,效率高 数据不安全
  • 相关阅读:
    线程池略略观
    spring-mvc的工作原理
    openstack cinder-backup流程与源码分析
    为何说只有 1 种实现线程的方法?
    经典排序算法原理解析与优劣对比
    Java中List和ArrayList的区别
    openstack-taskflow 组件记录
    递归:如何利用递归求解汉诺塔问题?
    登录MySQL提示ERROR 1045 (28000)错误解决方法
    回归JavaScript基础(九)
  • 原文地址:https://www.cnblogs.com/cz-blog/p/7839789.html
Copyright © 2011-2022 走看看