目录
1 概念
索引是帮助MySQL高效获取数据的数据结构,对数据库表中一列或多列的值进行排序,使用索引可快速访问数据库表中的特定信息.
特点:提高数据检索的效率,降低资源消耗;但占据磁盘空间,降低更新表的效率,需要维护.
2 分类
2.1 主键索引
设定为主键后,数据库自动建立索引,值不能为空或Null.
2.2 唯一索引
索引列的值必须唯一,值最多有一个空.
2.3 普通索引
分单列索引和复合索引.
(1) 最佳左前缀特性
复合索引idx_列名1_列名2_列名3 等于创建了索引(列名1,列名2,列名3)、(列名1,列名2)和(列名1),因此创建时应该将最常用作限制条件的列放在最左边,依次递减.在使用组合索引的列为条件时,必须要出现最左侧列作为条件,否则索引不生效的.
2.4 前缀索引
基于原始索引字段,截取前面指定的字符个数或者字节数来做的索引.
(1) 支持的数据类型
①char/varchar 类型:基于前缀字符长度,f1(10) 指的前 10 个字符;
②binary/varbinary 类型:基于字节大小,f1(10) 指的是前 10 个字节长度;
③text/blob 类型:只支持前缀索引,不支持整个字段建索引.
3 语法
3.1 创建索引
(1) 主键索引
-- 建表时设置索引
create table 表名 (
列名 数据类型 primary key
);
-- 以修改表的方式添加索引
alter table 表名 add primary key 表名(列名);
(2) 唯一索引
-- 建表时设置索引
create table 表名 (
列名1
...
unique index index_name(列名)
);
-- 建表后添加索引
create unique index index_name on 表名(列名);
-- 以修改表的方式添加索引
alter table table_name add unique index index_name on 表名(column_name);
(3) 普通索引
-- 建表时设置索引
create table 表名 (
列名1
,列名2
...
index idx_表名_列名1_列名2(列名1,列名2,...)
);
-- 建表后添加索引
create index idx_列名1_列名2_列名3 on 表名(列名1,列名2,列名3...);
-- 以修改表的方式添加索引
alter table 表名 add index idx_列名1_列名2(列名1,列名2);
3.2 删除索引
(1) 删除主键索引
alter table 表名 drop primary key;
(2) 删除其它索引
drop index 索引名 on 表名;
3.3 查看索引
show index from 表名;