• mysql B+Tree索引的一点理解


    1.聚集索引

    聚集索引就是按照每张表的主键构建一个B+树,同时叶子节点中存放的即为整行记录,聚集索引这个特性决定了索引组织表中的数据也是索引的一部分,同时B+树数据数据结构一样,每个数据页都通过一个双向链表来记性链接(通过主键查询是不需要进行回表操作的)

    2.辅助索引

    辅助索引又被称为非聚集索引,叶子节点并不包含行记录的全部数据,叶子节点除了包含键值以外,还包含主键键值,如果谓词条件中只有辅助索引包含的列,那么需要从辅助索引的根节点找到叶子节点,通过叶子节点对应的主键键值,再从主键索引的根节点找到主键索引的叶子节点,然后将数据取出来

    数据库执行一下查询,通过辅助索引name这个列的过程就是如下所示:

    create table t1(id int,name varchar(20),class int,primary key(id),key(name));

    select id,name,class from t1 where name='xxx';

    3.引申问题

    1.当某个表没有创建主键索引,仅仅创建了一个普通索引,那么MySQL是如何进行检索数据的呢?

    MySQL会默认生成一个6字节的指针_rowid,这里的普通索引存放的就是(键值,_rowid),以此来进行数据的访问,但是这个是有长度限制的,当到达2^48这个值之后,就会从0继续开始,如果我们的数据足够大,那么这个值是可以达到的,对于没有主键的查询显然是不准确的,可能一个查询会返回两个值。这就是为什么MySQL一定要创建主键索引的原因。

    2.当某个表没有主键索引,只有一个普通非唯一索引,添加主键索引会发生什么呢?

    根据我的理解,表会进行重建,根据非聚集索引定义,非聚集索引要存放主键索引的键值,因此也会进行重建。

     

  • 相关阅读:
    Allegro PCB Design GXL (legacy) 使用slide无法将走线推挤到焊盘的原因
    OrCAD Capture CIS 16.6 导出BOM
    Altium Designer (17.0) 打印输出指定的层
    Allegro PCB Design GXL (legacy) 将指定的层导出为DXF
    Allegro PCB Design GXL (legacy) 设置十字大光标
    Allegro PCB Design GXL (legacy) 手动更改元器件引脚的网络
    magento产品导入时需要注意的事项
    magento url rewrite
    验证台湾同胞身份证信息
    IE8对css文件的限制
  • 原文地址:https://www.cnblogs.com/hanglinux/p/15247411.html
Copyright © 2020-2023  润新知