第七章视图和触发器77课件.pptx
;学习目标;
表的索引就如同书的目录一样,通过索引可以大大提高查询速度,改善数据库的性能。其具体表现如下:
(1)通过创建唯一性索引,可以保证数据记录的唯一性。
(2)可以大大加快数据的检索速度。
(3)可以加快表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
(4)在使用ORDEYBY和GROUPBY子句进行数据检索时,可以显著减少查询中分组和排序的时间。
(5)使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。
;
索引带来的查找速度的提高也是有代价的,因为索引要占用存储空间,而且为了维护索引的有效性,向表中插入数据或者更新数据时,数据库还要执行额外的操作来维护索引。所以,过多的索引不一定能提高数据库的性能,必须科学地设计索引,才能提高数据库的性能。
;
1.普通索引
普通索引是由KEY或INDEX定义的索引,它是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。该类型索引可以创建在任何数据类型中。
2.唯一索引
唯一索引是由UNIQUE定义的索引,指索引列的值必须唯一,但允许有空值。如果是在多个列上建立的组合索引,则列值的组合值必须唯一。
;
3.全文索引
全文索引是由FULLTEXT定义的索引,是指在定义索引的列上支持值的全文查找。它只能创建在CHAR、VARCHAR或TEXT类型的字段上。
4.空间索引
空间索引是由SPATIAL定义的索引,是只能在空间数据类型(GEOMETRY、POINT、LINESTRING和POLYGON。)的列上建立的索引。
需要注意的是,创建空间索引的字段,必须将其声明为NOTNULL。
;
5.单列索引
单列索引指的是在表中单个字段上创建索引,它可以是普通索引、唯一索引或者全文索引,只要保证该索引只对应表中的一个字段即可。
6.多列索引
多列索引指的是在表中多个字段上创建的索引。只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用。
;
索引并非越多越好
避免对经常更新的表建立过多的索引
数据量小的表最好不要使用索引
在不同???少的列上不要建立索引
为经常需要排序、分组和联接操作的字段建立索引
;用的CREATETABLE命令创建表的时候就创建索引。其语法格式如下:
CREATETABLE表名
(字段名数据类型[完整性约束条件],
字段名数据类型[完整性约束条件],
...
字段名数据类型,
UNIQUE|FULLTEXT|SPATIAL]INDEX|KEY[别名](字段名[(长度)])[ASC|DESC]);
参数说明:
UNIQUE:该选项表示创建唯一索引,在索引列中不能有相同的列值存在。
FULLTEXT:该选项表示创建全文索引。
SPATIAL:该选项表示创建空间索引。
别名:该选项表示创建索引的名称。不加此选项,则默认用创建索引的字段名为该索引名称。
长度:该选项指定字段中用于创建索引的长度。不加此选项,则默认用整个字段内容创建索引。
ASC|DESC:该选项表示创建索引时的排序方式。其中ASC为升序排列,DESC为降序排列。默认为升序排列。
;创建teacher_1表,同时在表的tname字段上建立普通索引。;使用SHOWCREATETABLE语句查看表的结构。
可以看出,tname字段上已经创建了一个名为tname的索引。
;为了查看索引是否被使用,可以使用EXPLAIN语句进行查看。
EXPLAINSELECT*FROMteacher_1WHEREtname=马艳红\G
从显示结果可以看出,possible_keys和key的值都为tname,说明tname索引已经存在并且已经开始被使用了。
;创建course_1表,同时表中的cname字段创建名为UK_cname的
唯一索引,并且按照升序排列。;创建course_2表,同时对course_2表中的brief字段创建名为FT_brief的全文索引。;SQL语句如下:
CREATETABLEe_0
(spaceGEOMETRYNOTNULL,
SPATIALINDEXsp(space)
)ENGINE=MyISAM;
需要注意的是,创建空间索引的字段的值不能为空。;对应的SQL语句如下:
CREATETABLEcourse_3
(cnoC