目录
1 索引的介绍
索引,就是⽤来提⾼数据表中数据的查询效率的。
索引,就是将数据表中某⼀列/某⼏列的值取出来构造成便于查找的结构进⾏存储,⽣成 数据表的 ⽬录
当我们进⾏数据查询的时候,则先在 ⽬录 中进⾏查找得到对应的数据的地址,然后再到 数据表中根据地址快速的获取数据记录,避免全表扫描。
2 索引的分类
MySQL中的索引,根据创建索引的列的不同,可以分为:
主键索引:在数据表的主键字段创建的索引,这个字段必须被primary key修饰,每张表 只能有⼀个主键
唯⼀索引:在数据表中的唯⼀列创建的索引(unique),此列的所有值只能出现⼀次,可以 为NULL
普通索引:在普通字段上创建的索引,没有唯⼀性的限制 组合索引:两个及以上字段联合起来创建的索引
说明 :
1. 在创建数据表时,将字段声明为主键(添加主键约束),会⾃动在主键字段创建主键索 引;
2. 在创建数据表时,将字段声明为唯⼀键(添加唯⼀约束),会⾃动在唯⼀字段创建唯⼀ 索引;
3 创建索引
唯一索引
-- create unique index <index_name> on 表名(列名);
create unique index index_test1 on emp(eid);
普通索引
-- create index <index_name> on 表名(列名)
create index index_test2 on emp(eid);
select *from emp where eid=1001;
组合索引
-- create index <index_name> on 表名(列名1、列名2)
create index index_test3 on emp(eid,ename);
select *from emp where eid=1001; -- 不能执行索引
select *from emp where ename='aaa'; -- -- 不能执行索引select *from emp where eid=1001 and ename='aaa';
全⽂索引
MySQL 5.6 版本新增的索引,可以通过此索引进⾏全⽂检索操作,因为MySQL全⽂检索 不⽀持中⽂,因此这个全⽂索引不被开发者关注,在应⽤开发中通常是通过搜索引擎 (数据库中间件)实现全⽂检索
create fulltext <index_name> on 表名(字段);
4 索引使⽤
索引创建完成之后⽆需调⽤,当根据创建索引的列进⾏数据查询的时候,会⾃动使⽤索 引; 组合索引需要根据创建索引的所有字段进⾏查询时触发。
在 命令⾏窗⼝中可以查看查询语句的查询规划:
explain select * from tb_testindex where tid=250000\G;
5 查看索引
-- 命令⾏
show create table tb_testindex\G;
-- 查询数据表的索引
show indexes from tb_testindex;
-- 查询索引
show keys from tb_testindex;
6 删除索引
-- 删除索引:索引是建⽴在表的字段上的,不同的表中可能会出现相同名称的索引
-- 因此删除索引时需要指定表名
drop index index_test3 on tb_testindex;
7 索引的使⽤总结
7.1 优点
索引⼤⼤降低了数据库服务器在执⾏查询操作时扫描的数据,提⾼查询效率
索引可以避免服务器排序、将随机IO编程顺序IO
7.2 缺点
索引是根据数据表列的创建的,当数据表中数据发⽣DML操作时,索引⻚需要更新;
索引⽂件也会占⽤磁盘空间;
7、3使用索引的原则
更新频繁的列不应该设置索引;
数据量小的表不适合;
重复数据多的字段不应该设为索引(比如性别,只有男和女,一般来说:重复的数据超过百分之15就不应该建索引);
首先应该考虑where和order by 涉及的列上建立索引;