mysql索引

1,什么是索引

   索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用指向数据,这就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

将数据进行排序整理的过程就称为索引

2.MySQL索引分类

3①,从屋里层面来划分;聚集索引和非聚集索引

   1.1  聚集索引 : 索引存储和数据的实际存储都是按照顺序的存储

   -----> 一张表中只能有一个唯一的聚集索引

   1.2 非聚集索引: 索引存储和数据的实际存储是没有顺序

               一张表有多个非聚集索引

②,从实际应用上来划分

  •   单值索引:该索引只能给单个列添加
  •   组合索引: 该索引可以给多个列组合添加
  •   主键索引: 给主键添加
  •  唯一索引: 给唯一约束添加

唯一索引: 必须保证的数据是唯一的

 唯一组合索引:必须保证组合的数据是唯一的!

说明:

1.我们创建表时就会指定主键和唯一约束,那么就相当于给表的字段添加了主键和唯一索引。

3.MySQL索引语法 

1.创建索引

① 在已有表的字段上直接创建

-- 创建普通索引
CREATE INDEX 索引名 ON 表名(字段);
CREATE INDEX ind_emp_empname ON tb_emp(emp_name);

-- 创建唯一索引
CREATE UNIQUE INDEX 索引名 ON 表名(字段);

-- 创建普通组合索引
CREATE INDEX 索引名 ON 表名(字段1,字段2,...);

-- 创建唯一组合索引
CREATE UNIQUE INDEX 索引名 ON 表名(字段1,字段2,...);

说明:

1. 如果在同一张表中创建多个索引,要保证索引名是不能重复的

2.  上诉方式不能添加主键索引,也比较麻烦,需要指定索引名

②,在已有表的字段修改表时指定

-- 添加一个主键,这意味着索引值必须是唯一的,且不能为null
ALTER TABLE 表名 ADD PRIMARY KEY (字段);  -- 默认索引名:primary

-- 添加唯一索引(除了NULL外,NULL可能会出现多次)
alter table 表名 add unique(字段); -- 默认索引名:字段名

-- 添加普通索引,索引值可以出现多次。
alter table 表名 add index(字段); -- 默认索引名:字段名

③,创建表时指定

CREATE TABLE student(
  id INT PRIMARY KEY auto_increment, -- 主键索引
  name VARCHAR(30),
  phone VARCHAR(11) UNIQUE, -- 唯一索引
  sex VARCHAR(5),
  birthday DATE,
  INDEX(name) -- 普通索引
);

2.查看索引

show index from 表名; 

3.删除索引

 1.直接删除

 drop index 索引名 on 表名;

2. 修改表时删除

alter table 表名 drop index 索引名;

 索引也会失效

  在判断  != <> , 在模糊查询 条件中是以占位符开头

InnoDB(聚簇索引)

MySQL5.5版本之后默认存储引 . 特点:支持事务,支持外键约束

-- 创建 innodb存储引擎表
CREATE TABLE tab_innodb(
 id INT,
 name VARCHAR(32)
)ENGINE = INNODB; -- 这里不指定ENGINE = INNODB默认也是INNODB

 上述表建好后,在对应的mysql安装目录的数据库下面会创建如下两个文件:

面试题:

1.你知道mysql有哪些索引

1.Mysql中常用的索引有B+树索引(包括普通索引,唯一索引,主键索引 )、哈希索引,全文索引(通过查找文本中的关键词,类似于搜索引擎),R-TREE索引(表示空间索引,myisam支持空间索引,空间索引主要用于地理空间数据类型,空间索引会从所有维度来索引数据。查询时,可以有效地使用任意维度来组合查询。很少使用)

2.Mysql 传统意义上的索引为B+ 树索引,B+ 树索引的本质就是B+ 树在数据库中的实现,数据库中的B+ 树的高一般为2-4层,因此查找某一键值的行记录只需2-4次IO,大概0.02~0.04秒。

2.非聚簇索引一定会回表查询吗?

 不一定,这涉及到查询语句所要求的字段是否全部命中了索引,如果全部命中了索引,那么就不必再进行回表查询.

举个简单的例子,假设我们在员工表的年龄上建立了索引,那么当进行select age from employee where age < 20的查询时,在索引的叶子节点上,已经包含了age信息,不会再次进行回表查询.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值