zoukankan      html  css  js  c++  java
  • 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.当某个表没有主键索引,只有一个普通非唯一索引,添加主键索引会发生什么呢?

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

     

  • 相关阅读:
    VIM中去除Windows文本中的^M符号,多种方法
    LAMP=LINUX+Apache+MySQL+PHP
    个人常用的VIM命令列表
    vim与windows/linux之间的复制粘贴小结
    eclipse中安装vim插件
    关闭VIM/VI自动备份
    linux一些个非官方网站
    程序员的编辑器
    linux和windows双系统互拷文件乱码问题
    Linux ubuntu lamp安装配置环境phpmyadmin
  • 原文地址:https://www.cnblogs.com/hanglinux/p/15247411.html
Copyright © 2011-2022 走看看