【mysql】索引

微信扫一扫,分享到朋友圈

【mysql】索引

基本知识点:

  • 索引是在存储引擎层实现的
  • MyISAM引擎和Innodb引擎都使用B+Tree作为索引结构,但是底层实现还是有些不同的
  • 索引一经创建不能修改,如果要修改索引,只能删除重建。
  • Innodb索引和数据存储在同一个文件,MyISAM索引文件和数据文件是分离的。

索引按照功能分为:

主键索引,唯一索引,普通索引,前缀索引,全文索引

创建主键索引: alter table table_name add PRIMARY KEY ( `column` ) //主键索引可以包含多个列
创建普通索引: alter table table_name add index index_name(column);
创建唯一索引: alter table table_name add UNIQUE index index_name(column);
创建前缀索引 :alter table table_name add index index_name(columns(6)); //只能是字符串字段
创建全文索引: alter table table_name add FULLTEXT index index_name (column);//Mysql 全文索引是专门为了解决模糊查询提供的,但是开销很大
删除索引: drop index index_name on table_name;

按照索引的字段个数:

单列索引,联合索引;

其中
联合索引满足最左匹配原则

如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 。对于a,c, 只走a字段索引,不会走c字段。

按照磁盘存储来区分:

聚簇索引,非聚簇索引

聚簇索引可认为是磁盘将实际数据按照定物理地址进行顺序存放,并且与索引的顺序是一致的。那么当索引是相邻的,对应的数据一定也是按照相邻的顺序存放。

【MyISAM的主键索引和辅助索引】

由上图可以看到:

1.在MyISAM中,索引的数据结构是一颗B+Tree

2.在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。

3.在MyISAM中,叶节点的data域存放的是数据记录的地址。

因此,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。

MyISAM的索引方式也叫做“非聚簇”的。

Innodb【主键索引】【非主键索引】

主键索引的叶子节点存的是整行数据
非主键索引的叶子节点内容是主键的值

【显然,主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小;

非主键索引的查询数据需要多扫描一棵索引树,因此,我们在应用中应该尽量使用主键查询数据;】

聚簇索引: InnoDB的主键

非主键索引:唯一索引、普通索引等……

Mysql5.6及之后版本添加了 索引下推 这个优化,减少二级索引的回表操作。(只作用在二级索引)

科学家发现1.1亿年前恐龙的最后一餐 看看都吃了啥

上一篇

日漫《NANA》翻拍国产电视剧 剧情曝光、年底开拍

下一篇

你也可能喜欢

【mysql】索引

长按储存图像,分享给朋友