美文网首页
关于数据库索引的一些记录

关于数据库索引的一些记录

作者: 非甲即丁 | 来源:发表于2020-03-25 21:28 被阅读0次

    一两千万数据的表慢查询如何加快?

    • 索引是帮助Mysql高效获取数据的排好序的数据结构

    • 索引数据结构

      1. 二叉树:左边元素比右边元素小,这样就进行了事先排序,但是如果元素是第增,那就会退化成为链表,如果查询是最大的那么就需要遍历所有元素,所以不可以。被排除。
      2. 红黑树:弱平衡二叉树,自动将树旋转,这样保证树不会退化成为链表,但是树的高度在数据量极大的时候依旧会很高。被排除。
      3. B-Tree:优化红黑树,每个节点放入多个数据
      4. B+树:数据都储存到叶子节点,非叶子节点用来存放索引,叶子节点会有冗余。(应用占比99%)
        image.png
        Mysql 节点默认大小大小设置为16K,一个索引大小为8B(bigInt类型)硬盘位置指针大小为6B那么一个节点就可以存储16KB/(8B+6B)即1170个子节点,如果树的高度为3,那么就可以存储117011702这么多的数据

      5.关于hash索引(有应用,但是应用较小)的问题:hash会有重复(但是mysql对此有优化,这不是主要原因),主要原因是范围查找会很慢(where col>6)

    两种储存引擎(mysql表文件默认在安装目录的/data/文件夹下)

    • MyISAM:叶子节点索引和数据所在指针值组成,数据储存在另外的文件中,每个表都有3个文件,.MYI 索引文件,.MYD数据文件,.frm 表结构文件
    • InnoDB:叶子节点索引和数据组成,每个表都有2个文件,.MYID索引和数据数据文件,.frm 表结构文件,由于数据和索引放在一起,所以叫做聚集索引,并且为了组成B+树的数据结构,每张表必须有一个主键。

    下图为InnoDB

    image.png

    相关文章

      网友评论

          本文标题:关于数据库索引的一些记录

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