• MYSQL:索引


    索引

    一个排序的数据结构,用来协助提升查询效率。InnoDB中是B+树。

    Page

    InnoDB中存储数据的最小逻辑单位,一个页16KB,存储多个行。
    一个节点上就是一个页的大小,页的数据在节点中。加载节点的次数越多,I/O寻址的次数越多。B+树矮胖 减少了寻址次数。

    B+树和B树区别

    • 关键字数和分叉相等,B树是关键字=分叉-1(存储的关键字少一个)
    • B+树非叶子节点不存储数据(能容纳更多的关键字,更矮胖),查找性能更均衡
    • B+树叶子节点连成了链表,更利于范围查询

    B+树的叶子节点是一个个页,先找到页的地址后,具体的数据在页中查找。

    自适应哈希索引

    为热点页自动创建哈希索引,提升访问效率。无法显示创建哈希索引。

    聚簇索引

    索引的键值的逻辑顺序和表数据行的物理存储顺序是一致的。
    主键索引 = 聚簇索引。因为实际数据是按主键顺序创建的。
    InnoDB的表一定会有主键,没有指定主键会用不为null 的UNIQUE key创建,假如这种key也不存在,会用隐藏的row_id当主键。

    如何建立索引

    • 列的区分度必须要高
    • 联合索引最左匹配规则
    • 联合索引把区分度高的放前面
    • 过长字段建立前缀索引
    • 负向查询(<>,not in)可能会被优化,从而用到索引

    覆盖索引

    直接在辅助索引查询到所需要的数据,不用去主键索引再次查询(回表),就叫覆盖索引,效率很高。

    索引条件下推(默认开启)

    假如过滤条件可以在索引中进行,那么直接在索引中过滤。
    索引的过滤在存储引擎中进行。
    数据的过滤在服务端进行。

    为什么不建议用无序字段建立索引

    无序字段插入很容易插入到现有索引页的某个位置,这时候不得不移动元素,从而产生额外的开销。

  • 相关阅读:
    js相关小实例——滚动监听
    js相关小实例——进度条
    数据库的连接
    php函数
    php语法
    php基础上
    列表 选择背景变化
    飞入
    移动列表内容
    javascript的语法
  • 原文地址:https://www.cnblogs.com/fcb-it/p/13369722.html
Copyright © 2020-2023  润新知