MySQL数据库技术知识点数据的高效检索

北京荨麻疹医院哪最好 https://m-mip.39.net/disease/mip_10490515.html
北京荨麻疹医院哪最好 https://m-mip.39.net/disease/mip_10490515.html
在数据库操作中,常常需要完成既定数据的检索。少量数据存放在表中,只需使用基本的SQL语句即可检索得到。但当数据量较大时,受MySQL数据库底层实现原理的限制,缺省的SQL语句,检索效率较低。例如:当执行“select*fromemployeewhereempno=”语句按员工号查询时,MySQL数据库默认的处理方式是从第一条记录开始依次向后遍历,直到找到id为的数据。这样,查找的效率随着数据量的增大,而逐步降低。为此,MySQL数据库在建表时允许通过创建索引来加快数据表的查询、排序等相关操作。一、什么是索引在MySQL数据库中,索引和表、视图、同义词等类似是数据库“对象”的一种。可看做字典的目录。是对数据库表中一列或者多了的值进行排序后的一种结构,其作用就是提高表中的数据查询速度。MySQL中的索引分为如下几种:1.普通索引普通索引是由key或index定义个索引,它是MySQL中的基本索引类型,可以创建在任何数据类型中。其值是否唯一和非空有字段本身的约束条件所决定。例如,在student表的id字段上建立一个普通索引,查询记录时,就可以根据该索引查询,从而提高效率。2.唯一性索引唯一性索引是指由unique定义个索引,该索引所在字段的值必须是唯一的。例如,在grade表的stu_id字段上建立唯一性索引,那么stu_id字段的值就必须是唯一的。3.全文索引全文索引是由fulltext定义的索引,它只能创建在char、varchar或text类型的字段上。并且现在只有MyISAM存储引擎支持全文索引。4.单列索引单列索引指的是在表中单个字段上创建索引,它可以是普通索引、唯一索引或者全文索引,只有保证该索引只对应表中一个字段即可。5.多列索引多列索引是指在表的多个字段上创建索引,只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用。如,在student表的id、name和score字段上创建一个多列索引,那么只有查询条件中使用了id字段时,该索引才会被使用。相较于单列索引,当我们频繁的需要同时检索表中多列时,多列索引的效率会高很多。6.空间索引空间索引是由spatial定义的索引,它只能创建在空间数据类型的字段上。MySQL中的空间数据类型有4种:geometry、point、linestring和polygon。需要注意的是,创建空间索引的字段,必须将其声明为NOTNULL,并且空间索引只能在存储引擎为MyISAM的表中创建。需要注意的是,虽然索引可以提高数据的查询效率,但索引会占用一定的存储空间。并且创建和维护索引所消耗的时间,是随着数据量的增加而增加的。因此,使用索引时,应综合考虑其优缺点,不能肆意创建。二、索引的生成要想使用索引提高数据表的访问速度,首先要创建一个索引。创建索引的方式大致可分为三种。1、创建表指定索引在MySQL中,创建表时可以直接给表的指定字段指定索引,这种方式需在建表之初就预设了数据即将被频繁检索的场景,其基本语法格式如下所示:createtable表名(字段名数据类型[完整性约束条件],字段名数据类型[完整性约束条件],……字段名数据类型[unique

fulltext

spatial]index

key[别名](字段名1[(长度)])[asc

desc]);相关语法解析:1)unique:可选参数,表示唯一索引。2)fulltext:可选参数,表示全文索引。3)spatial:可选参数,表示空间索引4)index和key:用来表示字段的索引,二者选一即可。5)别名:可选参数,表示穿件的索引名称。6)字段名1:指定索引对应字段的名称。7)长度:可选参数,用于表示索引的长度。8)asc和desc:可选参数。asc表升序,desc表降序排列。MySQL中的6种索引类型,如下:1)创建普通索引在t1表中id字段上创建索引,SQL语句如下:createtablet1(idint,namevarchar(20),scorefloat,index(id));可使用explain语句查看索引是否被使用,SQL语句如下:explainselect*fromt1whereid=1;2)创建唯一性索引创建一个表名为t2的表,在表中的id字段上建立索引名为unique_id的唯一性索引,并按升序排列,SQL语句如下:createtablet2(idintnotnull,namevarchar(20)notnull,uniqueindexunique_id(idasc)这样,便在id字段上建立了一个名为unique_id的唯一性索引。3)创建全文索引创建一个表名为t3的表,在表中的name字段上建立索引名为fulltext_name的全文索引,SQL语句如下:createtablet3(idintnotnull,namevarchar(20)notnull,fulltextindexfulltext_name(name))engine=MyISAM;这样,即可在name字段上建立一个名为fulltext_name的全文索引。需要注意的是,由于目前只有MyISAM存储引擎支持全文索引,默认的InnoDB存储引擎不支持全文索引。因此,在建立全文索引时,一定要注意表存储引擎的类型,对于经常需要索引的字符串、文字数据等信息,可以考虑存储到MyISAM存储引擎的表中。4)创建单列索引创建一个表名为t4的表,在表中的name字段上建立索引名为single_name的单列索引,SQL语句如下:createtablet4(idintnotnull,indexsingle_name(name(20))这样,即可在name字段上建立一个名称为single_name的单列索引,并且索引的长度为20。5)创建多列索引创建一个表名为t5的表,在表中的id和name字段上建立索引名为multi的多列索引,SQL语句如下:createtablet5(idintnotnull,indexnulti(id,name(20))这样,即可在id和name字段上建立一个名为multi的多列索引。需要注意的是,在多列索引中,只有查询条件中使用了这些字段中的第一个字段时多列索引才会被使用。为了验证这个说法是否正确,将id字段作为查询条件,通过explain语句查可看索引的使用情况,SQL语句如下:explainselect*fromt5whereid=1;但是,如果只使用name字段作为查询条件,multi索引不会被使用。6)创建空间索引创建一个表名为t6的表,在空间类型为geometry的字段上创建空间索引,SQL语句如下:createtablet6(idint,spacegeometrynotnull,spatialindexsp(space)这样,即可在t6表中的space字段上建立名称为sp的空间索引了。需要注意的是,创建空间索引时,所在字段的值不能为空值,并且表的存储引擎为MyISAM。2、已有表创建索引若想在一个已经存在的表上创建索引,可以使用createindex语句,其创建索引的具体语法格式如下所示:create[unique

fulltext

spatial]index索引名on表名(字段名[(长度)][asc

desc]);在上述语法格式中,unique、fulltext和spatial都是可选参数,分别用于表示唯一性索引、全文索引和空间索引;index用于指明字段为索引。为了更好的展示如何使用createindex语句在已经存在的表上创建索引,接下来创建一个book表,该表中没有建立任何索引,创建book表的SQL语句如下:createtablebook(bookidintnotnull,booknamevarchar()notnull,authorsvarchar()notnull,infovarchar()null,


转载请注明:http://www.aierlanlan.com/grrz/5914.html