zoukankan      html  css  js  c++  java
  • mysql-索引

    索引模型: hash,有序数组,搜索树

    1,hash: key,value存储。存储结构类似于Java7 的hashmap。 同一节点使用链表的形式存储。适合单个等值查询,不适用于范围查询

    2,有序数组:按从大到小有序存储,类似于链表。等值,范围查询使用二分 时间复杂度Olog(N),查询效率搞。但插入一条数据都要,移动后面的所有数据。适用于静态存储引擎

    3,搜索树:树结构,查询时间复杂度O(log(N)),更新时间复杂度O(log(N)).

    数据库大都不适合使用二叉树,层级会非常高,每一层存放在一个数据页中,100万节点的平衡二叉树,树高20,需要访问20个数据块,每个数据快的寻址大概需要10ms.查询耗时比较长.

    搜索需要查多次磁盘(从磁盘随机读取一个数据块,需要10ms左右的寻址时间)。

    innoDB引擎的索引。B+树

    innoDB的索引模式也可以称之为N叉树,这个N大概为1200。N叉树的高度一般不超过4,当高度为4时,其可以存储的数据为1200的三次方,大概为17亿。这样查询一个值最多只需要访问3次磁盘。

    而且树的第二层,有很大的概率在内存中,这样大大提升了查询效率。

    innoDB的数据存储在B+树的叶子节点,按主键顺序存储。相当于主键索引,也称之为聚簇索引

    非主键索引,也称之为二级索引。二级索引也是一颗B+树,按索引字段排序。

    二级索引的查找数据过程,先通过普通索引查出数据对应的主键,在通过主键查询整行信息(查询数据不仅是主键时)(回查聚簇索引,称之为回表

    如果查询的数据只是主键id,不需要回表,因为通过二级索引已经可以查询到主键信息。称之为覆盖索引

    注意:每次数据调整,都需要调整每颗树的结构。在索引过多时,每次新增需要调整的数据结构就更多。

    固索引当按需创建,杜绝无效索引。

    另外索引支持最左前缀原则,like 'li%' 这种形式可以支持索引。

    索引下推 联合查询时,先在索引中过滤完成之后再回表取数据

  • 相关阅读:
    angular6 增加webpack配置 亲测可用
    Git 忽略提交 .gitignore
    pc 媒体查询
    angular vue通过node启动项目局域网内关闭防火墙无法访问的解决办法
    js判断isNumber(obj)
    hook
    javascript中this的四种用法
    JavaScript中闭包函数
    JavaScript(ES3)中的方法, 及bind apply call的使用
    ES6 箭头函数
  • 原文地址:https://www.cnblogs.com/luoying/p/12088295.html
Copyright © 2011-2022 走看看