前言
无论什么时候,只要提到数据库,都会说到索引,它是干什么的,一般怎么来用,咱们一起来看一下。
正文
1、为什么要创建索引?
- 提高查询速度
- 利用索引的唯一性来控制记录的唯一性
2、什么是索引?
索引是对数据表中一个或多个字段的值进行排序的结构。数据库索引就好比是一本书的目录,根据目录可以快速定位查找区域,从而快速找到搜索项。
3、索引的种类
根据索引对数据表中记录顺序的影响,索引可以分为聚集索引(clustered index)和非聚集索引(nonclustered index)。
- 聚集索引(也叫聚簇索引)
表数据按照索引的顺序来存储的,当在表中插入一行数据时,这行数据的存放的顺序(物理顺序)和建立索引的键值的逻辑顺序相同。
一个表只能包含一个聚集索引。 - 非聚集索引(也叫非聚簇索引)
表数据存储顺序与索引顺序无关,当在表中插入一行数据时,这行数据存放的顺序(物理顺序)在表的最后,不会影响数据表中原有的存储顺序。
一个表中可以创建多个非聚集索引,一个表最多可以创建249个非聚集索引。
根据其索引键值是否可重复,索引可分为唯一索引和普通索引。 - 唯一索引
要求创建索引的关键字段值在表中不能有重复值。 - 普通索引
普通索引允许被索引的数据列包含重复的值。
根据其索引字段的组成情况,索引可分为单个索引和复合索引。 - 基于多个字段的组合创建索引为复合索引,复合索引同时也可以是唯一索引。
- 基于单个字段创建索引为单个索引。
索引的基本操作
- 创建索引
create index <索引的名字> on table_name (列的列表)
- 修改索引
alter table table_name add index[索引的名字] (列的列表)
--先删除
ALTER TABLE user
DROP INDEX idx_user_username;
--再以修改后的内容创建同名索引
CREATE INDEX idx_user_username ON user (username(8));
- 创建表的时候指定索引
create table table_name ( [...], INDEX [索引的名字] (列的列表) )
- 删除索引
--删除指定表中指定名称的索引
ALTER TABLE table_name
DROP INDEX index_name;
- 查看索引
--如果查看索引前,没有使用user db_name等命令指定具体的数据库,则必须加上FROM db_name
SHOW INDEX FROM table_name [FROM db_name]
--如果查看索引前,没有使用user db_name等命令指定具体的数据库,则必须加上db_name.前缀
SHOW INDEX FROM [db_name.]table_name
总结