MySQL 入门(六)—— 索引

索引是一种特殊的数据库结构,可用来快速查询数据库表中的特定记录。MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。

1、索引简介

索引是创建在表上的,是对DB表中一列或多列的值进行排序的一种结构。
不同的存储引擎定义了每个表的最大索引数和最大索引长度。所有存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。
索引有两种存储类型,包括B型树索引和哈希索引。InnoDB和MyISAM支持BTREE索引,MEMORY支持HASH索引和BTREE索引,并默认为前者。
索引也有缺点:创建和维护需要耗费时间,且耗费时间随着数据量的增加而增加;占用物理空间;增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降低。
特别地,索引可以提高查询速度但是会影响插入记录的速度。因为,向有索引的表中插入记录时,系统会按照所有进行排序在进行插入。因此,在插入大量记录时,最好先删除删除表中的索引,然后插入数据,最后再创建索引。

1.1 索引的分类

(1) 普通索引
普通索引在创建时,不附加任何约束条件。普通索引可以创建在任何数据类型中,其值是否唯一和非空由字段本身的完整性约束条件决定。
(2) 唯一性索引
使用UNIQUE参数可以设置索引为唯一性索引。即对于表A中的字段a中创建唯一性索引,那么字段a的值必须是唯一的。
通过唯一性索引,可以更快速地确定某条记录。
主键就是一种特殊唯一性索引。
(3)全文索引
使用FULLTEXT参数可以设置索引为全文索引。全文索引只能创建在CHAR、VARCHAR或TEXT类型的字段上。
查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。
注意只有MyISAM存储引擎支持全文索引。
默认情况下,全文索引的搜索执行方式不区分大小写,但索引的列使用二进制排序后,可以执行区分大小写的全文索引。
(4)单列索引
单列索引即在表中的单个字段上创建索引。单列索引可以是普通索引、唯一性索引,也可以是全文索引。
(5)多列索引
注意只有查询条件中使用了这些字段中的第一个字段时,索引才会被使用。
(6)空间索引
使用SPATIAL参数可以设置索引为空间索引。空间索引只能建立在空间数据类型上,这样可以提高系统获取空间数据的效率。MySQL中的空间数据类型包括GEOMETRY和POINT、LINESTRING和POLYFON等。
同样,目前只有MyISAM存储引擎支持空间索引,且索引的字段不能为空值。

1.2 索引的设计原则

(1)经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序会浪费很多时间,有必要为这些字段建立索引。
(2)如果某个字段经常用来做查询条件,为其建立索引,可以提高整个表的查询速度。
(3)一方面,索引会占用磁盘空间,另一方面,修改表时,对索引的重构和更新很麻烦,有必要限制索引的数目。
(4)如果索引的值很长,也会影响查询的速度,因此,尽量使用数据量少的索引。
(5)当索引字段的值很长时,最好使用值的前缀来索引。
(6)当表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要,此时有必要将其删除,减少索引对更新操作的影响。

2、创建索引

创建索引指在某个表的一列或多列上建立以个索引,以提高对表的访问速度。具体有以下三种方式

2.1 创建表的时候创建索引

MySQL 入门(六)—— 索引_第1张图片
其中,参数INDEX和KEY用来指定字段为索引的,两者选一即可,作用一样;别名用于给创建的索引取新名字;属性1即指定索引对应字段的名称,显然该字段必须是前面已定义好的字段;长度指索引的长度,只有字符串类型才可以使用;ASC和DESC分别表示升序排列和降序排列。

2.2 在已经存在的表上创建索引

这里写图片描述
其中,参数索引名即给创建的索引取的新名字。

2.3 用ALTER TABLE语句来创建索引

在已经存在的表上,可以用ALTER TABLE语句来创建索引
这里写图片描述

3、删除索引

具体语言为
这里写图片描述

你可能感兴趣的:(MySQL,MySQL,入门教程)