版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章视图和触发器学习目标掌握索引的创建;视图的创建;管理视图;通过视图修改数据;创建、删除触发器13了解查看索引信息的方式;触发器的概念;触发器的常见应用2理解索引的概念和分类掌握了解熟悉
表的索引就如同书的目录一样,通过索引可以大大提高查询速度,改善数据库的性能。其具体表现如下:(1)通过创建唯一性索引,可以保证数据记录的唯一性。(2)可以大大加快数据的检索速度。(3)可以加快表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。(4)在使用ORDEYBY和GROUPBY子句进行数据检索时,可以显著减少查询中分组和排序的时间。(5)使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。7.1索引的概述7.1.1索引概述
索引带来的查找速度的提高也是有代价的,因为索引要占用存储空间,而且为了维护索引的有效性,向表中插入数据或者更新数据时,数据库还要执行额外的操作来维护索引。所以,过多的索引不一定能提高数据库的性能,必须科学地设计索引,才能提高数据库的性能。7.1索引的概述7.1.1索引概述
1.普通索引
普通索引是由KEY或INDEX定义的索引,它是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。该类型索引可以创建在任何数据类型中。2.唯一索引
唯一索引是由UNIQUE定义的索引,指索引列的值必须唯一,但允许有空值。如果是在多个列上建立的组合索引,则列值的组合值必须唯一。7.1索引的概述7.1.2索引的分类3.全文索引全文索引是由FULLTEXT定义的索引,是指在定义索引的列上支持值的全文查找。它只能创建在CHAR、VARCHAR或TEXT类型的字段上。
4.空间索引
空间索引是由SPATIAL定义的索引,是只能在空间数据类型(GEOMETRY、POINT、LINESTRING和POLYGON。)的列上建立的索引。
需要注意的是,创建空间索引的字段,必须将其声明为NOTNULL。7.1索引的概述5.单列索引
单列索引指的是在表中单个字段上创建索引,它可以是普通索引、唯一索引或者全文索引,只要保证该索引只对应表中的一个字段即可。
6.多列索引
多列索引指的是在表中多个字段上创建的索引。只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用。7.1索引的概述
索引并非越多越好避免对经常更新的表建立过多的索引数据量小的表最好不要使用索引在不同值少的列上不要建立索引为经常需要排序、分组和联接操作的字段建立索引7.1索引的概述7.1.3索引的设计原则用的CREATETABLE命令创建表的时候就创建索引。其语法格式如下:CREATETABLE表名(字段名
数据类型[完整性约束条件],
字段名
数据类型[完整性约束条件],...
字段名数据类型,UNIQUE|FULLTEXT|SPATIAL]INDEX|KEY[别名](字段名[(长度)])[ASC|DESC]);
参数说明:UNIQUE:该选项表示创建唯一索引,在索引列中不能有相同的列值存在。FULLTEXT:该选项表示创建全文索引。SPATIAL:
该选项表示创建空间索引。别名:该选项表示创建索引的名称。不加此选项,则默认用创建索引的字段名为该索引名称。长度:该选项指定字段中用于创建索引的长度。不加此选项,则默认用整个字段内容创建索引。ASC|DESC:该选项表示创建索引时的排序方式。其中ASC为升序排列,DESC为降序排列。默认为升序排列。7.2创建索引7.2.1创建表的时候直接创建索引创建teacher_1表,同时在表的tname字段上建立普通索引。SQL语句如下:CREATETABLEteacher_1(tnoCHAR(4)NOTNULLPRIMARYKEY,tnameVARCHAR(10)NOTNULL,tgenderCHAR(1),teduVARCHAR(10),tproVARCHAR(8),INDEX(tname));7.2创建索引实例7-1使用SHOWCREATETABLE语句查看表的结构。可以看出,tname字段上已经创建了一个名为tname的索引。7.2创建索引为了查看索引是否被使用,可以使用EXPLAIN语句进行查看。EXPLAINSELECT*FROMteacher_1WHEREtname='马艳红'\G从显示结果可以看出,possible_keys和key的值都为tname,说明tname索引已经存在并且已经开始被使用了。7.2创建索引创建course_1表,同时表中的cname字段创建名为UK_cname的唯一索引,并且按照升序排列。SQL语句如下:CREATETABLEcourse_1(cnoCHAR(4)NOTNULLPRIMARYKEY,
cnameVARCHAR(40),
cperiodINT,creditDECIMAL(3,1),ctnoCHAR(4),briefVARCHAR(255),UNIQUEINDEXUK_cname(cnameASC));7.2创建索引实例7-2创建course_2表,同时对course_2表中的brief字段创建名为FT_brief的全文索引。SQL语句如下:CREATETABLEcourse_2(cnoCHAR(4)NOTNULLPRIMARYKEY,cnameVARCHAR(40),cperiodINT,creditDECIMAL(3,1),ctnoCHAR(4),briefVARCHAR(255),FULLTEXTINDEXFT_brief(brief))ENGINE=MyISAM;7.2创建索引实例7-3SQL语句如下:CREATETABLEe_0(spaceGEOMETRYNOTNULL,SPATIALINDEXsp(space))ENGINE=MyISAM;需要注意的是,创建空间索引的字段的值不能为空。创建一个名为了e_0的表,在数据类型为GEOMETRY的space字段上创建空间索引。7.2创建索引实例7-4对应的SQL语句如下:CREATETABLEcourse_3(cnoCHAR(4)NOTNULLPRIMARYKEY,cnameVARCHAR(40),cperiodINT,creditDECIMAL(3,1),ctnoCHAR(4),briefVARCHAR(255),INDEXIDX_cname(cname(10)));创建course_3表,同时对course_3表中的cname字段创建名为IDX_cname的单列索引,索引长度为10。7.2创建索引实例7-5
对应的SQL语句如下:CREATETABLEelective_1(snoCHAR(8)NOTNULL,cnoCHAR(4)NOTNULL,scoreINT,INDEXIDX_multi(sno,cno));
需要注意的是,在多列索引中,只有查询条件中使用了多列索引的第一个字段时,索引才会被引用。
创建elective_1表,在表中的学号sno和课程号cno上建立多列索引。7.2创建索引实例7-6
使用EXPLAIN语句查看将学号sno字段作为查询条件时,索引的使用情况,SQL语句执行结果如图所示。可以看出,possible_keys和key的值都为IDX_multi,说明IDX_multi索引已经存在并且已经开始被使用了。7.2创建索引
使用EXPLAIN语句查看将课程号cno字段作为查询条件时,索引的使用情况,SQL语句执行结果如图所示。可以看出,possible_keys和key的值都为NULL,说明IDX_multi索引还没有被使用。7.2创建索引基本的语法形式如下:CREATE[UNIQUE][FULLTEXT][SPATIAL]INDX索引名ON表名(字段名[(长度)][ASC|DESC][,…]);例:创建一个没有任何索引的学生表stu。CREATETABLEstu(snochar(8)PRIMARYKEYNOTNULL,snameVARCHAR(10)NOTNULL,sgenderCHAR(1),sbirthDATE,sclassVARCHAR(20),sresumeVARCHAR(255))ENGINE=MyISAM;7.2创建索引7.2.2在已经存在的表上使用的CREATEINDEX语句创建索引对stu表的sname字段创建名称为stu_name的普通索引。CREATEINDEXstu_nameONstu(sname);对stu表的sno字段创建名称为stu_sno的唯一索引。CREATEUNIQUEINDEXstu_snoONstu(sno);对stu表的sresume字段创建名为stu_sresume的全文索引。CREATEFULLTEXTINDEXstu_sresumeONstu(sresume);7.2创建索引实例7-7实例7-8实例7-9
CREATEINDEXstu_sname_sclassONstu(sname,sclass);
对stu表的sname和sclass字段创建名为stu_sname_sclass的多列索引。7.2创建索引实例7-10SQL语句如下:
(1)创建e_1表。CREATETABLEe_1
(spaceGEOMETRYNOTNULL,)ENGINE=MyISAM;
(2)在e_1表space字段上创建空间索引CREATESPATIALINDEXsp_spaceONe_1(space);创建一个名为了e_1的表,在数据类型为GEOMETRY的space字段上创建空间索引。7.2创建索引实例7-11其语法格式如下:ALTERTABLE表名ADD[UNIQUE|FULLTEXT|SPATIAL]INDEX索引名(字段名[(长度)][ASC|DESC]);7.2创建索引7.2.3在已经存在的表上使用的ALTERTABLE语句创建索引对stu表的sname字段创建名为stu_sname的普通索引。SQL语句如下:ALTERTABLEstuADDINDEXstu_sname(sname);对stu表的sno字段创建名为stu_sno的唯一索引。SQL语句如下:ALTERTABLEstuADDUNIQUEINDEXstu_sno(sno);对stu表的sresume字段创建名为stu_sresume的全文索引。SQL语句如下:ALTERTABLEstuADDFULLTEXTINDEXstu_sresume(sresume);7.2创建索引先建立一个没有任何索引的stu表实例7-12实例7-13实例7-14ALTERTABLE图书ADDINDEXstu_sname_sclass(sname,sclass);上述SQL语句执行后,使用SHOWCREATETABLE语句查看表的结构:对stu表的sname和sclass字段创建名为stu_sname_sclass的多列索引。7.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗交接班工作制度
- 勤工助学岗工作制度
- 反诈六个一工作制度
- 口腔护士工作制度模板
- 国航乘务员工作制度
- 听力筛查室工作制度
- 如何制定绿化工作制度
- 4S店修车工作制度
- 学校筹建处工作制度
- 孕产营养门诊工作制度
- DZ∕T 0270-2014 地下水监测井建设规范
- DL-T5153-2014火力发电厂厂用电设计技术规程
- 金融学基础(第三版)课件:巧用保险
- 麻醉复苏期患者的护理
- 空气的热湿处理-空气热湿处理设备(通风与空调技术)
- 高中数学专题讲座课件
- 雅思阅读:雅思阅读复习计划
- 机电一体化项目教程 课件 导言、任务1-7 传感器技术-加盖拧盖单元
- 网络安全与信息防护
- 地下管线测量技术方案
- 动产融资金融仓平台技术白皮书
评论
0/150
提交评论