> 文章列表 > 什么是索引(保姆级)

什么是索引(保姆级)

什么是索引(保姆级)

目录

索引

1、什么是索引?

2、索引是用来做什么的?

3、使用索引有什么好处

四、索引的分类:

1、普通索引

2、唯一索引

3、主键索引

4、全文索引

5、空间索引

六、索引的作用:

七、普通索引

1、普通索引的创建

2、以修改表的方式添加索引

3、查看表中所有索引

4、索引的删除:

八、联合索引

九、唯一索引

1、创建唯一索引的基本格式:

2、以修改的方式添加唯一索引

  #唯一索引的创建

十、主键/外键索引

1、创建主键/外键索引

2、以修改的方式添加主键约束

创建表时添加主键索引

以修改表结构的方式添加主键索引

十一、全文索引

1、创建全文索引的基本格式:

2、添加全文索引

十二、空间索引:

全文索引fulltext index

#全文索引的创建

#以修改表的方式添加全文索引

十三、索引的优缺点

十四、使用索引时的注意事项


索引:

1、什么是索引?

所谓索引,可以将其理解成为书的目录一样,相当于一个快捷查询。索引是以一种高效获取数据的存储结构来存储
数据,例如:hash、二叉搜索树、红黑树等。

2、索引是用来做什么的?

索引用于提高查询的效率,对需要频繁查询的某些字段建立索引,比普通字段的查询速度要快一些,除此之外索引并没有其他的用处

3、使用索引有什么好处

建立索引能提高查询效率

四、索引的分类:

1、普通索引

对普通的字段建立的索引,允许定义索引的字段重复和空值。

2、唯一索引

对唯一字段建立的索引,允许定义索引的字段空值,但不允许重复

3、主键索引

对主属性建立的索引,不允许定义索引的字段重复和空值

4、全文索引

对于字符串或文本类型建立的索引,提高查询文本关键字的速率
只有char varchar text 等数据类型才可以建立全文索引,也只有mylsam存储引擎支持

5、空间索引

对空间数据类型建立的索引,只有空间数据类型支持

1、普通索引的建立:

Create index 索引名 on 表名<字段1,[字段2,....字段n]>;

#注意:对于建立联合索引的字段,所有字段同时查效率才会有提高,只查其中一部分效率是和普通查询差不多的。
联合索引:多列的组合索引,查询效率高于多个单列索引合并的效率。

2、以修改的方式创建索引

 

alter table 表名 add index 索引名 (字段2,..., 字段n]);

3、删除索引


drop index 索引名 on 表名;

4、查看表中所有索引

 

show index from 表名;或者 show keys from 表名;

六、索引的作用:

-- 索引就是用来提高查询效率的数据库对象,除此之外没有其他功能
-- 索引会使用利于查询的数据结构来组织存储数据

七、普通索引

1、普通索引的创建

-- 学生姓名经常被查询,可以为它创建一个索引create index ind_sname on student(s_name);select s_name from student;

-- 在数据量比较少的情况下,索引对查询效率的提升不会很明显
-- 数据量越大,索引对查询效率的提升越明显

2、以修改表的方式添加索引

 

alter table student add ind_sage(s_age);

3、查看表中所有索引

 

show index from student;

4、索引的删除

drop index ind_sage on student;
drop index ind_sname on student;

八、联合索引

-- 对多个属性列同时添加一个索引
-- 创建多列联合索引
create index ind_sname on student(s_id,s_name);
-- 创建多个单列索引
create index ind_sid on student(s_id);
create index ind_sname on student(s_name);-- 在查询语句中,多列同时查询时,添加多列联合索引比多个单列索引查询效率高
select s_id,s_name from student;

九、唯一索引

1、创建唯一索引的基本格式:

 

create unique index <索引名> on <表名(属性名)>;
-- 创建唯一约束时会自动建立唯一索引,所以查询主键,外键或者带有唯一约束的字段时速度会更快一些。

2、以修改的方式添加唯一索引

alter table<表名> add unique (<属性名>);-- 没有建立索引的表存不存在索引呢?
如果你有添加主键或外键等完整性约束的话,会默认创建唯一索引

唯一索引unique index

-- 唯一索引不允许字段(属性)的取值重复
-- 对添加了唯一约束的字段,会自动建立唯一索引
-- 对建立了唯一索引的字段,会自动添加唯一约束

-- 唯一索引和唯一约束本质上是同一个东西,只是从不同的角度来看而已
-- 从提高查询效率来看,称为唯一约束
-- 从限制表中属性的取值范围来看,称为唯一约束

 
 #唯一索引的创建

 -- 学生姓名经常被查询,可以为它创建一个索引create unique index ind_sname on student(s_name);
-- 以修改表的方式添加索引
alter table student add unique(s_name);
-- 复合唯一索引就相当于复合唯一约束

十、主键/外键索引

1、创建主键/外键索引

和外键约束时会自动建立主键索引,或者在创建表格时创建主键索引
如:create table 表名 {id int;name varchar(20);
primary key(id) -- 为属性id创建一个主键索引}

2、以修改的方式添加主键约束

alter table<表名>add primary key(<列名>);
-- 为什么外键也会建立主键索引呢?
由于外键是关联其他表的主键,外键和主键是一种映射关系,所以它会建立主键索引

创建表时添加主键索引

 

create table 表名(
id int primary key, -- 主键约束(主键索引)
name varchar(20)
);

以修改表结构的方式添加主键索引

alter table 表名 add primary key(id);
-- 主键/外键索引不允许字段(属性)的取值重复和为空
-- 对添加了主键/外键约束的字段,会自动建立主键/外键索引
-- 对建立了主键/外键索引的字段,会自动添加主键/外键约束-- 主键/外键索引和主键/外键约束本质上是同一个东西,只是从不同的角度来看而已
-- 从提高查询效率来看,称为主键/外键约束
-- 从限制表中属性的取值范围来看,称为主键/外键约束

 

十一、全文索引

全文索引主要针对文本的内容进行分词,加快查询速度,如资料查询,论文查询,文本查询等。

1、创建全文索引的基本格式:

 

create full text index<索引名> <表名(字段名(length))>;

2、添加全文索引

 

alter table 表名 add fulltext (字段1[,字段2,....,字段n]);

十二、空间索引:

空间索引对空间数据类型(点,线、面和立体图形等)建立的索引,一般只有制作地图或者制作模型等相关领域有涉及到,这里就不做过多介绍了。

全文索引fulltext index

-- 只能对文本类型(字符串/文本)添加的索引
-- 只能用于提高文本类型的查询效率,如:字符串模糊匹配,搜索关键字信息

#全文索引的创建

-- 对班级名称创建全文索引
create fulltext index fullind_cname on class(c_name);

#以修改表的方式添加全文索引

 

alter table teacher add fulltext(t_name);

空间索引:
-- 对空间数据类型建立的索引,用于提高空间数据类型的查询效率

十三、索引的优缺点

优点:索引能够极大的提高查询效率
缺点:索引会占用额外的存储空间
索引对数据的删除和修改等操作而言,是一种负担
索引会降低数据库的数据维护速度,降低数据库的可维护性

十四、使用索引时的注意事项

1、建立索引提高了查询效率,但是不利于增加,修改和删除等操作
2、对于数据小和经常进行修改,删除等操作的表避免使用索引
3、对于需要频繁查询的字段应该创建索引
4、最适合创建索引的列是where子句中的列,而不是select里面的列,也就是建立索引要精准
5、根据数据查询的具体需求来决定是否建立索引。