mysql-数据库-索引详解.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
索引的概念 索引是一种特殊的数据库结构,可以快速查询数据库表中特定记录。索引是提高数据库性能的重要方式。表的索引是表中数据的目录。索引建立在表上,不能单独存在。 索引的作用 表的索引是表中数据的目录。如果使用索引,则扫描索引文件,根据索引项,找到元祖的地址,然后再根据地址找到数据。由于索引文件很小,而且索引有顺序,可以极大地提高查询的效率。 索引存放内容 索引列的值(有序) 物理行地址 08001 address1 08002 address2 08003 address3 08004 address4 ... ... 索引的分类 聚集索引与非聚集索引 聚集索引中键值的逻辑顺序决定了表中相应行的物理顺序。聚集索引确定表中数据的物理顺序。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(联合索引)(不过mysql的innodb只支持主键聚集索引,不支持联合聚集索引),就像电话簿按姓氏和名字进行组织一样。 非聚集索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表可以包含多个非聚集索引。 InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),innodb会按照如下规则进行处理: 1、如果一个主键被定义了,那么这个主键就是作为聚集索引 2、如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚集索引 3、如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚集索引,这个隐藏的主键是一个6个字节的列,改列的值会随着数据的插入自增。 Mysql索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引。 普通索引 创建普通索引时,不附加任何限制条件。可以创建在任何数据类型上,其值是否唯一和非空由字段自身的完整性约束条件决定。建立索引后,查询时可以通过索引进行查询。 惟一性索引 使用unique参数可以设置索引为惟一性索引。在创建惟一性索引时,限制该索引的值必须是唯一的。通过惟一性索引可以更快速的确定某条记录。主键就是一种特殊惟一性索引。 全文索引 使用fulltext参数可以设置索引为全文索引。全文索引只能创建在char、varchar、text类型字段上,查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。 单列索引 在表中单个字段上创建索引。单列索引只根据该字段进行索引。单列索引可以是普通索引也可以是惟一性索引、全文索引,只要保证索引只对应一个字段即可。 多列索引 在表的多个字段创建一个索引。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询。只有查询条件使用这些字段中第一个字段时,索引才会被使用。 空间索引 使用spatial参数可以设置索引为空间索引,空间索引只创建在空间数据类型上,可以提高系统获取空间数据的效率。空间数据类型包括geometry、point、linestring、polygon等。目前只有myisam存储引擎支持空间索引。这类索引很少使用。 索引设计原则 惟一性索引的值是惟一的,可以更快速通过索引确定某条记录。 为经常需要排序、分组、联合操作的字段建立索引 为常作为查询条件的字段建立索引 限制索引的数目 索引数目不是越多越好,每个索引都占用磁盘空间,索引越多,需要磁盘空间越多。修改表时,对索引的重构和更新很麻烦。越多的索引,更新表浪费更多的时间。 尽量使用数据量少的索引 索引值很长,查询速度会受到影响。 尽量使用前缀来索引 如果索引字段值很长,最好使用值前缀来索引。 ?删除不再使用或很少使用的索引 表中数据被大量更新或者数据使用方式改变后,原有一些索引不再被使用。数据库管理员应当定期找到这些索引,删除,减少索引对更新操作的影响。 示例: CREATE TABLE employee( id INT primary key, ename VARCHAR(50), sex char(2), age INT , PASSWORD VARCHAR(50) ); #创建索引 CREATE INDEX 索引名 ON mytable(列名(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。 CREATE INDEX index_ename ON employee(ename(20)); #注意添加索引的长度必须小于建表时给字段定义的长度,也可以不给长度, 如:CREATE INDEX index_ename ON employee(ename); #删除索引 DROP INDEX index_ename ON employee; #创建唯一索引 索引列的值必须唯一,但允许有

文档评论(0)

k12教育文档 + 关注
实名认证
服务提供商

本人专注于k12教育,英语四级考试培训,本人是大学本科计算机专业毕业生,专注软件工程计算机专业,也可承接计算机专业的C语言程序设计,Java开发,Python程序开发。

1亿VIP精品文档

相关文档