您的位置:首页 > 数据库 > MySQL

MySQL 入门(六)—— 索引

2016-08-03 10:19 225 查看
索引是一种特殊的数据库结构,可用来快速查询数据库表中的特定记录。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 创建表的时候创建索引



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


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


 

其中,参数索引名即给创建的索引取的新名字。


2.3 用ALTER TABLE语句来创建索引

在已经存在的表上,可以用ALTER TABLE语句来创建索引 



上面这个提供了好多选项,只是一个总的模板,具体的要看实际情况添加不同的选项,

例:在 four 这个表中给  姓名  这个列添加普通索引,索引的名称叫  qwe:    
1.添加PRIMARY KEY(主键索引) 

mysql>alter table four add primary key(姓名);

2.添加UNIQUE(唯一索引) 

mysql>alter table four add unique (姓名);

3.添加INDEX(普通索引) 

mysql>alter table four add index qwe (姓名); 

4.添加FULLTEXT(全文索引) 

mysql>alter table four add fulltext (姓名);

5.添加多列索引 

mysql>alter table four add index qwe ( 姓名,学号 );



3、删除索引

具体语言为 



例:要删除索引的话:

drop index qwe on four;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: