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

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

  • 索引是帮助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

你可能感兴趣的:(关于数据库索引的一些记录)