索引
可以简单理解为一本书的目录信息,是为了提升查找效率而建立的
索引的创建
1、在创建一个主键、唯一键、外键时候,数据库会自动地针对查找字段设置索引;
2、在创建表时侯,使用 index 关键字进行普通索引的声明
3、修改表结构,给指定的字段添加索引
alter table 表名 add index 索引名(要增加索引信息的列名)
4、为指定的表创建索引
create index 索引名 on 表名(列名)
创建索引信息之后在进行索引的查看,发现新增了一个索引信息----即我们刚刚创建的索引信息:
索引的查看
1、show index from 表名;
2、show keys from 表名;
3、desc 表名;
索引的删除
1、drop index 索引名 on tablename;
2、修改表结构:
alter table 表名 drop index 索引名;
数据库中数据信息在底层实际上是存储在 InnoDB 中的:
而(InnoDB)索引实际上是采用 数据结构中 B+ 树结构来实现的
(注意区分B 树、B+树的区别)
聚簇索引 & 非聚簇索引
mysql 数据库中,InnoDB 存储引擎默认使用聚簇索引,MyISAM 存储引擎默认使用非聚簇索引
聚簇索引
索引数据与用户数据存放在一起;
一张表中只有一个聚簇索引;
聚簇索引数据与索引物理存储顺序是一致的,且有序存储;
在表中除了聚簇索引还有辅助索引,而聚簇索引类型中,辅助索引的叶子节点中存放的并不是用户数据,而是聚簇索引的键值;
非聚簇索引
索引数据与用户数据分离存储;
非聚簇索引是索引与数据分离,索引的叶子节点中存储的是数据的物理地址,因此索引的顺序与数据在物理磁盘的实际存储顺序不一定一致;
非聚簇索引的辅助索引,与主键索引并无区别,都是叶子节点中存放地址;
索引创建原则
1、比较频繁作为查询条件的字段应该创建索引;
2、唯一性太差的字段不适合创建索引,即使被频繁查询;
3、频繁修改的字段不适合创建索引------维护成本高;
4、索引并不是越多越好,因此不会作为查询条件的字段就不要创建索引。