欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL-InnoDB索引

程序员文章站 2022-03-28 11:11:41
...

InnoDB具有B+树索引,全文索引,哈系索引。其中哈希索引是自动为表添加的,不能人为干预。而B+树索引是最常用的索引,根据键值对快速找到数据。B+树的索引不能找到一个特定键值对的具体行,它是先找到一个页,再载入页来查找行,最后得到特定数据。

看看B+树的构造和由来

根据《算法导论》,B树这个数据结构是专为磁盘设计的。因为磁盘的读取比内存慢得多,可能要相差5个数量级.

像二叉树那种数据结构还是要读取log2(n)次数据,显然对于磁盘而言,读得次数越多,速度越慢。B+树的设计是有多个分支,一次性读取多个数据页(B树节点),然后进行很多次的if..else判断,再读取下一次的数据页(B树节点).这样做能够减小从磁盘读取的次数logm(n),m为树的分支树。

B+树的另一个特点是,所有数据都在叶子节点上,非叶子节点都是索引。而且叶子节点上的数据都是顺序存放的,形成了类似于链表的东西。

在写入,删除的过程中进行的操作还是很复杂的。变换有点像红黑树,不想详细讨论了。

MySQL-InnoDB索引

聚簇索引

这是InnoDB的默认的索引,之前说过InnoDB是索引组织表,这里的索引就是指这个聚簇索引。它根据每张表的主键来建立B+树索引,这个索引和数据是存放在一起的,所以查询优化更倾向于使用聚簇索引来查找数据。

辅助索引

这个是用户自己建立的索引,叶子节点不包含行的所有数据。除了用于建立索引的列外,叶子节点还包含一个书签,用来告诉InnoDB在哪里找到与索引相对应的行数据。由于InnoDB是索引组织表,这个书签保存的就是相应行数据的聚簇索引键。

辅助索引一般只是用于找到聚簇索引的键,而聚簇索引才是找数据的。

MySQL-InnoDB索引

SQL索引语句

//方式1
alter table tb_name
add key [index_name]
[index_type] (col1,col2,...)

alter table tb_name
drop [primary] key index_name

//方式2
create [unique] index index_name
[index_type] on tb_name(col1,col2,..)

drop index index_name on tb_name

//查看索引
show index from tb_name;

//看看索引查询内容
mysql> show index from film\G;
********************* 1. row ********************
        Table: film
   Non_unique: 0         //是否unique,primary肯定是
     Key_name: PRIMARY   
 Seq_in_index: 1         //在索引中该列的位置,单列索引为1
  Column_name: film_id   //索引的列
    Collation: A         //B+树是A,Hash是NULL
  Cardinality: 1000      //该列值的唯一性的预估值
     Sub_part: NULL      //是否只索引前几个字符
       Packed: NULL      //是否压缩
         Null:           //是否Not null
   Index_type: BTREE
      Comment: 
Index_comment: 

哈希索引

哈希索引对于where index=xxx时查找很快,对范围查找就无能为力了

相关标签: 索引