mysql从入门到精通笔记-第十一章索引
作者:互联网
索引是一种特殊的数据库结构,用于提高国内数据性能的重要方式,可以用来快速查询数据表中的特定记录。
mysql中所有的数据都可以被索引,用于快速查询数据库中特定的记录。
索引包括:
- 普通索引
- 唯一性索引
- 全文索引
- 单列索引
- 多列索引
- 空间索引
11.1 索引概述
11.1.1 mysql索引概述
索引是将数据库中单列或者多列值进行排序的结构。(索引是一种结构),使用索引可以大幅提升查询的效率。
1、可以提升查询的速率;
2、可以降低服务器的负载;
3、索引类似于书本的目录,不用遍历所有数据,通过索引即可查询到数据。
索引的劣势:
1、索引需要维护:创建索引、后期的维护耗时;
2、索引需要占用物理存储空间;
3、索引在进行插入等操作因为要插入索引的操作,会消耗时间和性能(可以考虑先删除索引,大量插入数据后再进行新建索引的操作)
总体来说:索引可以提高查询速率,但是需要一定的维护成本。
不同的存储引擎,对每个表的索引的个数和最大长度的定义也不同:所有的存储引擎至少支持16个引擎,每个索引最少256字节长度。
mysql默认使用的是B树的索引方式,也可以使用哈希的方式。
11.1.2 mysql索引的分类
- 普通索引
不应用任何约束条件的索引,该索引可以在任何数据类型中创建。用户可以通过该索引进行查询,字段本身的约束条件可以判断其值是否为空或者唯一。 - 唯一性索引
使用UNIQUE设置唯一性索引,唯一性索引的的值必须唯一。通过唯一性索引,用户可以快速定位某条记录,另外:主键就是一种特殊唯一索引。 - 全文索引
使用FULLTEXT可以定义全文索引,全文索引只对CHAR和VARCHAR或者TEXT生效。查询数据量较大的时候,使用全文索引能够提高查询速度。不过对大小写不敏感。如果索引的列使用二进制排序后,可以执行大小写敏感的全文检索。 - 单列索引
只对一列字段进行索引,可以包括普通索引、唯一性索引、全文索引这3种方式进行索引。 - 多列索引
多列索引是在表的多个字段上创建的索引,索引指向创建时的对应的多个字段。
用户可以通过这几个字段进行查询。应该该索引,用户必须使用这些字段中的第一个字段。 - 空间索引
空间索引使用SPATIAL参数,空间索引只能建立在空间数据类型上,可以提高系统获取空间数据的效率。
mysql中只有myisam存储引擎支持空间索引,且索引的字段不能为空。
11.2 创建索引
已经存在的数据表中,至少一列上进行索引的创建,提高数据库查询的速度和服务器的性能。
11.2.1 创建数据库时创建索引
CREATE TABLE 表名称(
属性名 属性类型 [约束条件],
属性名 属性类型 [约束条件],
属性名 属性类型 [约束条件],
属性名 属性类型 [约束条件]
[UNIUQE|FULLTEXT|SPATIAL] INDEX或者KEY
[别名](属性名1 [(长度)] [ASC|DESC])
);
1、索引的类型:UNIQUE-唯一索引、FULLTEXT-全文索引、SPATIAL-空间索引
2、Index和key用户指定字段索引,用户只用选择其中一个即可。
3、可以为索引取一个别名,别名的参数:
(1)属性名1:索引对应的字段名
(2)长度可选,索引的长度,字符串类型才可以使用
(3)ASC/DESC 升序和降序。
11.2.2 创建普通索引
11.2.3 创建唯一性索引
创建唯一性索引使用UNIQUE关键字进行表的约束。
唯一索引可以约束字段的唯一性,但是有时候并不能提升用户的查询速度,不能实现优化查询的目的。
11.2.4 创建全文索引
1、全文索引只能作用于 CHAR、VARCHAR、TEXT类型的属性字段;
2、只用存储引擎MyISAM支持全文检索,InnoDB或者其他存储引擎在5.6后引入支持;
11.2.5 创建单列、多列索引
1、创建单列索引,即是在单个属性字段上进行索引的创建;
2、创建多列索引,即是在多个属性字段上进行索引的创建:使用的时候必须要用到第一个字段,索引才会有效。
创建的方法和前面相同。
只用查询条件使用了第一列,即使用了name才会应用索引。
11.2.6 创建空间索引
1、字段必须要有NOT NULL的约束;
2、使用的字段类型是 geometry 类型才可以使用空间索引。
--后续使用后再补充
11.2.7 已经存在的表,创建索引
和创建表格时,创建索引类似,这里语法结构有点不同。
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON 表名(属性[长度|asc|desc]);
其他创建各种类型的索引方法类似。
11.3 修改索引
修改索引,起始就添加一个索引。
ALTER TABLE 表名 ADD [UNIQUE|FULTEXT|SPATIAL] INDEX index_name(属性名[len|desc|asc]);
通过修改表来实现
11.3 删除索引
不再需要的索引进行删除,节省空间,同时提高性能。
DROP INDEX index_name ON table_name;
标签:唯一性,创建,mysql,全文索引,11.2,索引,第十一章,属性 来源: https://www.cnblogs.com/spring2022/p/16397126.html