一:介绍
在MYSQL当中,索引的使用类似于书当中目录的作用,索引的使用能够让查询更加的迅速,比方说搜索mysql这个单词的时候,可以先从首字母为m开头的字母进行查找,这样就大大减少了搜索的时间,而不是从头到尾进行搜索,提高查询的速度
二:类型
主要分为两大类,一种是根据底层的结构进行区分的(HASH索引,和B-TREE索引),另外一种是根据功能进行区分的;
1.按照底层数据结构区分
1>HASH索引:
HASH索引实际上是根据哈希表的一种索引结构,通过在刚开始的时候,将索引列的值通过哈希算法(f())的方式,将其转化为哈希值.之后如果需要查找,再通过这个哈希值进行查找即可
2>BTREE索引:
一种树形结构的索引,从上(树根)往下(分支)不断缩小范围进行相应的查找
2.按照功能进行区分
1>单列索引:
①普通索引
②唯一索引
③主键索引
2>组合索引
3>全文索引
4>空间索引
三:依据功能区分讲解:
1.单列索引(仅仅只包含一个列,但是一个表当中可以有多个的单列索引):
1>普通索引:
Ⅰ介绍.
MYSQL当中最基本的索引类型,无限制,允许在定义索引的列种加入空值以及重复值,仅仅是为了加快查询速度
Ⅱ 操作.
添加方式一:直接在创建表的时候添加索引 create table emp1( id int, name VARCHAR(20), salary int, INDEX index_id(id) ); 添加方式二:创建表之后进行直接添加 create index indexname on tablename(columnname); create index index_salary on emp1(salary); 添加方式三:通过修改表结构进行添加索引 -- 推荐 alter table tablename add index indexname(columnname); alter table emp1 add index index_name(name); 删除索引操作: 一:drop index 索引名 on 表名 二:alter table 表明 drop index 索引名
2>唯一索引:
Ⅰ 介绍:
唯一索引跟普通索引相似,仅仅只有在本索引列上,数值必须是不同的,也可以有空值,但是如果是组合索引,列值的组合必须是唯一的
Ⅱ 操作:
-- 单列索引 添加方式一: create table emp1( id int, name VARCHAR(20), salary int, unique index_id(id) ); 添加方式二:创建表之后进行直接添加 create unique index indexname on tablename(columnname); create unique index index_salary on emp1(salary); 添加方式三:通过修改表结构进行添加索引 -- 推荐 alter table tablename add unique index indexname(columnname); alter table emp1 add unique index index_name(name); 删除方式: 一:drop index 索引名 on 表名 二:alter table 表明 drop index 索引名 alter table emp1 drop index index_salary; alter table emp1 drop index index_id;
3>主键索引 :
Ⅰ 介绍:
主键索引,顾名思义,在创建表的时候,针对某一个列添加的主键之后,系统会自动对其添加主键索引(PRIMARY KEY) 主键索引不允许出现重复值以及NULL值
2.组合索引:
1>介绍:
组合索引也叫做是复合索引,指的是在建立索引的时候使用了多个的字段.比如使用ID和姓名一起建立索引,同样的可以设置是复合普通索引,还是复合唯一索引
2>操作:
组合索引: 组合索引也叫做是复合索引,指的是在建立索引的时候使用了多个的字段.比如使用ID和姓名一起建立索引,同样的可以设置是普通索引,还是唯一索引 语法:复合普通索引 create index indexname on tablename(name1,name2....); create index index_id_name on emp1(id,name); 语法:创建唯一索引 create unique index indexname on tablename(name1,name2); create unique index index_id_name on emp1(id,name); 索引的删除: alter table tablename drop index indexname;
3>TIPS:
1.需要注意的是,如果使用复合唯一索引,那么仅仅当设置的值全部都重复出现,是一模一样的,才会出错误,其他情况下,只有一个索引列不一样也是正确的;
2.同时,对于复合索引设置的时候,也要注意设置的先后顺序,对于查询也是有一定影响的
select * from emp1 where name = '张三'; select * from emp1 where id = 1001; select * from emp1 where id=1001 and name='张三'; select * from emp1 where name ='张三' and id =1001; *前提,设置的复合唯一索引(id,name) 对于1进行查询的时候,不会使用复合唯一索引查询,因为没有提供设置的第一个唯一索引---id 而对于2,3都能够使用设置的复合唯一索引进行快速查询 即便是对于4,因为MYSQL系统会自动对其进行一定的优化,因此我们可以理解为3,4两个方式在mysql当中的作用是一样的
3.全文索引
1.介绍
1.关键词:fulltext
2.跟之前所学习的关键字like很像,全文索引主要是用来寻找文本当中的关键字,而不是直接跟索引当中的值进行比较,更像是一个搜索引擎,是以相似度为基本的查询,而不是简单的where语句的参数匹配查询
3.但是跟like查询不一样的是,like的查询适用于对于数据量比较小的,而全文索引更加适用于大量级别的文本查询,查询速度相比于like的文本查询快了几个数量级!但是全文索引的查询可能会存在一些的精度问题
2.操作:
创建全文索引的方法 一:alter table tablename add fulltext fulltextname(var1,var2....); 示例:对于表test添加的content添加全文索引 alter table test add fulltext full_content(content); 二: create fulltext index indexname on tablename(var1...); 使用全文索引 关键字:match(var1) against(查询内容); 示例: 查询表test当中所有包含yo的内容,使用全文查询 select * from test match(content) against('yo'); -- 查询不到,因为查询的最小搜索长度是3 select * from test match(content) against('you'); -- 可以查询到,满足最小的查询长度
3.TIPS:
如果想要通过全文索引查询,必须要注意的是全文索引的两个量(最小搜索长度以及最大搜索长度) 大于,或者是小于这个范围的搜索内容都无法搜索到!
可以使用 show variables like '%ft%'; 查看相应的数值大小
4:空间索引:
1.介绍:
1>MYSQL仅仅在5.7之后才支持空间索引
2>空间索引针对的是空间数据类型的字段建立的索引,MYSQL中的空间数据类型主要有4种,geometry,point,linestring,polygon
3>并且在创建空间索引的时候,这个索引列必须是not null 类型的
2.操作:
geometry 含义:空间数据 说明:任何一种空间类型 point 含义:点 说明:坐标值 lineString 含义:线 说明:有一系列点连接而成的 polygon 含义:多边形 说明:由多条线组成 操作: create table spa_0( id int primary key auto_increment, -- 'id' name VARCHAR(20), -- 门店名称 point_1 geometry not null, -- 经纬度表示 spatial key sap_index(point_1) );