zoukankan      html  css  js  c++  java
  • MySQL索引原理

    索引: 索引在MySQL中也叫是一种“键”,是存储引擎⽤于快速找到记录的一种数据结构。

    本质:
    通把随机的2过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制我们可以总是用同一种查找方式来锁定数据。

    磁盘IO与预读

    磁盘预读:当一次IO时不光把他当前磁盘地址的数据,而是把相邻的数据也都读取到内存的缓冲区内。(一次磁盘IO对于CPU非常慢)

    索引的数据结构:

    数据结构:数组、栈、链表、队列、树、图
    树: 树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。
    深度:树的高度(“层数”)

    特点:
    每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树

    B+树: ( 树 -- 二叉查找树 -- 平衡二叉树)
    INnodb -- 索引默认B+树
    叶子节点:带指针

    性质:索引字段要尽量小

    B+树详解:https://blog.csdn.net/Fmuma/article/details/80287924

    聚集索引和辅助索引(非聚集索引):
    聚集索引:
    优点:对主键的排序查找和范围查找速度非常快,叶子结点数据就是用户所要查询的数据。
    范围查询(即如果要查找主键某⼀范围内的数据,通过叶⼦节点的上层中间节点就可以得到⻚的范围,之后直接读取数据⻚即可)

    辅助索引:
    除了聚集索引外都是辅助索引(区别聚集索引:辅助索引的叶子节点不包含行记录的全部数据。每个叶子节点中的索引行中还包含一个书签)

    聚集索引 非聚集索引
    纪录的索引顺序与无力顺序相同, 因此更适合between and和order by操作 索引顺序和物理顺序无关
    叶子结点直接对应数据, 从中间级的索引的索引行直接对应数据页 叶子结点不直接指向数据页
    每张表只能创建一个聚集索引 每张表可以有多个非聚集索引,需要更多磁盘和内容,多个索引会影响insert和update的速度

    MySQL索引管理

    功能:快速查找
    mysql中primary key,unique,联合唯一也都是索引,这些索引除去加速查找以外,还有
    约束功能

    MySQL常用的索引:
    普通索引index:加速查找
    唯一索引:主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)
    -唯一索引UNIQUE:加速查找+约束(不能重复)
    联合索引:
    PRIMARY KEY(id,name):联合主键索引
    UNIQUE(id,name):联合唯一1索引
    INDEX(id,name):联合普通索引

    索引的两大类型hash与btree:
    hash类型:查询单条快,范围查询慢
    btree类型:b+树,层数越多,数据量指数级增长(此时使用,因为innodb默认支持btree)

  • 相关阅读:
    客户端加锁
    三次握手
    ForkJoinTask
    主从Reactor多线程模型
    Happen-before
    Enum
    Java 8
    Netty
    分布式一致性算法
    VisualStudio 2013 快捷键
  • 原文地址:https://www.cnblogs.com/yanlening/p/13865889.html
Copyright © 2011-2022 走看看