1. 索引概念
数据库是⽤来存储数据,在互联⽹应⽤中数据库中存储的数据可能会很多(⼤数据), 数据表中数据的查询速度会随着数据量的增⻓而逐渐变慢 ,从⽽导致响应⽤户请求的速度变慢——⽤户体验差,我们如何提⾼数据库的查询效率呢?
索引,就是⽤来提⾼数据表中数据的查询效率的
。
索引,就是将数据表中某⼀列/某⼏列的值取出来构造成便于查找的结构进⾏存储,⽣成数据表的 ⽬录。当我们进⾏数据查询的时候,则先在 ⽬录 中进⾏查找得到对应的数据的地址,然后再到数据表中根据地址快速的获取数据记录,避免全表扫描。
这个过程就好比从新华字典里查字一样。
2. 索引分类
MySQL中的索引,根据创建索引的列的不同,可以分为:
(1)主键索引
:在数据表的主键字段创建的索引,这个字段必须被primary key修饰,每张表只能有⼀个主键;
(2)唯⼀索引
:在数据表中的唯⼀列创建的索引(unique),此列的所有值只能出现⼀次,可以为NULL;
(3)普通索引
:在普通字段上创建的索引,没有唯⼀性的限制;
(4)组合索引
:两个及以上字段联合起来创建的索引。
说明
:
a. 在创建数据表时,将字段声明为主键(添加主键约束),会⾃动在主键字段创建主键索引;
b. 在创建数据表时,将字段声明为唯⼀键(添加唯⼀约束),会⾃动在唯⼀字段创建唯⼀索引。
3. 创建索引
(1)
唯一索引
-- 创建唯⼀索引: 创建唯⼀索引的列的值不能重复
-- create unique index 索引名 on 表名(列名);
-- 为name字段创建索引
create unique index index_test1 on student(name);
(2)
普通索引
create index index_test2 on student(age);
(3)
组合索引
create index index_test3 on student(name, age);
(4)
全文索引
MySQL 5.6 版本新增的索引,可以通过此索引进⾏全⽂检索操作,因为MySQL全⽂检索不⽀持中⽂,因此这个全⽂索引不被开发者关注,在应⽤开发中通常是通过搜索引擎(数据库中间件)实现全⽂检索。
4. 索引使用
索引创建完成之后⽆需调⽤,当根据创建索引的列进⾏数据查询的时候,会⾃动使⽤索引
;
组合索引需要根据创建索引的所有字段进⾏查询才能触发
。
select * from student where name="范瑶";
-- 组合索引需要根据创建索引的所有字段进⾏查询
-- select * from student where name="范瑶"; 不会触发索引
select * from student where name="范瑶" and age=25;
5. 查看索引
(1)
查询整张表的索引
show create table 表名\G;
(2)
查询整张表的索引
show indexes from 表名;
(3)
查询整张表的索引
show keys from 表名;
6. 删除索引
索引是建⽴在表的字段上的,不同的表中可能会出现相同名称的索引,因此删除索引时需要指定表名
。
-- 格式
drop index 索引名 on 表名;
drop index index_test1 on student;
7. 使用初步总结
7.1
优点
(1)索引⼤⼤降低了数据库服务器在执⾏查询操作时扫描的数据,提⾼查询效率;
(2)索引可以避免服务器排序、将随机IO变成顺序IO;
7.2
缺点
(1)索引是根据数据表的列所创建的,当数据表中数据发⽣DML操作时,索引⻚需要更新;
(2)索引⽂件也会占⽤磁盘空间。
7.3
注意事项
(1)数据表中数据不多时,全表扫描可能更快,不要使⽤索引;
(2)数据量⼤但是DML操作很频繁时,不建议使⽤索引;
(3)不要在数据重复读⾼的列上创建索引(例如性别);
(4)创建索引之后,要注意查询SQL语句的编写,避免索引失效。