索引

作者: 哓晓的故事 | 来源:发表于2019-01-22 17:50 被阅读0次

    索引小知识

    缓冲池

    基于磁盘的数据库系统都会有缓冲池页/块
    写操作,将读入缓冲池,在缓冲池中对进行修改,修改后的页,异步写入磁盘

    每个存储引擎,都有自己的缓冲池
    

    由于磁盘是顺序读取,InnoDB引擎中,根据来管理1个区有连续64页),区与区之间不一定连续。
    B+树只能查找到记录所在的页,再根据二分查找找到记录所在页的具体位置

    B+树直接存储介质】既是平衡二叉树(只有叶子节点保存数据->这是和B-树的区别),记录节点之间通过指针连接,通过旋转减少拆分(页拆分意味磁盘操作),通过填充因子(50%)来减少磁盘合并操作
    平衡二叉树内存存储结构查询快,维护需要旋转复杂

    优点:

    1. 更少的查找次数,出度大,高度小
    2. 磁盘预读特性,将索引的一个节点的大小设置为操作系统页的大小,使得一次 I/O就能完全载入一个节点。并且可以利用预读特性,相邻的节点也能够被预先载入

    InnoDB每个页大小16KB,B+树高度在2~4层(没层都是一次IO操作)

    聚集索引

    叶子节点存放的是行数据本身
    排序:因为聚集索引已经是排好序的,所以无需再进行排序操作。
    范围:我们只需要找到范围的两端,且由于叶子节点是一个双向链表,且是数据本身,所以两端叶子之间的叶子节点就是数据

    InnoDB中用到的索引是B+树

    非聚集索引

    叶子节点存放的是聚集索引的值

    所以对非聚集索引的查找[通常情况下]至少要经过两次B+树的遍历。且范围查找时,找到所有符合条件的聚集索引值之后,需要依次对每个聚集索引值找到对应的数据
    高度更高,存储的键值更多

    联合索引

    (a,b)索引时,可以单独查a也会走索引。而如果单独查b不会走索引

    索引范围

    可以使用explain来查看优化器结果
    当查询的数据量超过20%的时候,优化器会选择直接走聚集索引

    相关文章

      网友评论

          本文标题:索引

          本文链接:https://www.haomeiwen.com/subject/cbjcxqtx.html