数据库的索引

数据库的索引
目录一. 什么是索引二. 索引的优点三. 索引的缺点四. 索引的分类五. 表中添加索引的三种方式六. 表中如何删除索引七. 什么情况下适合建立索引八. 什么情况下不适合建立索引本帖并没有深入底层讲解索引的原理主要是关于一些索引的基本了解若有小伙伴想深入了解索引的底层原理B树可以如下文章也是我写的深入理解索引B树的基本原理_程序猿ZhangSir的博客-CSDN博客HASH索引AVL树B树B树的区别_avl索引和hash索引-CSDN博客一. 什么是索引MySQL 官方对索引的定义是索引(index)是帮助 MySQL 高效获取数据的数据结构。由此不难看出索引的本质是数据结构。可以简单理解为“排好序的快速查找数据结构”满足特定的查找算法这些索引结构以某种方式指向数据这样就可以在这些数据结构的基础上实现高级查找算法。另外索引是在存贮引擎中实现的因此不同存储引擎中索引的实现原理不一定完全相同。二. 索引的优点1提高数据的检索效率降低数据库的IO成本这也是创建索引最主要的原因。2通过创建唯一索引可以保证表中每一行数据的唯一性。3在实现数据的参考完整性方面可以加速表与表之间的连接。换句话说就是对于有依赖关系的子表和父表联合查询时可以提高查询速度。4在使用分组和排序进行查询时可以显著减少查询中分组和排序的时间降低CPU的消耗。三. 索引的缺点1创建索引和维护索引需要耗费时间并且随着数据量的增加耗费时间也会增加。2索引需要占用磁盘空间除了数据库中表占用的磁盘空间之外每一个索引也会占用一定的物理空间存贮在磁盘上如果有大量的索引可能索引文件比数据库文件更快达到最大文件尺寸。3虽然索引大大提高了表的查询效率但同时也降低了更新表的速度。当对表中的数据进行增删改时索引也需要动态地维护这样就降低了数据的维护速度。四. 索引的分类MySql索引包括普通索引唯一性索引全文索引单列索引多列索引和空间索引。1从功能逻辑上分主要分为四种普通索引唯一索引主键索引全文索引。2从物理实现上分分为聚簇索引和非聚簇索引。3从作用字段划分分为单列索引和联合索引。五. 表中添加索引的三种方式1创建表的时候就创建索引。2使用 ALTER TABLE ‘表名’ ADD (索引修饰符) INDEX ‘索引名’ (‘表字段’ ) 创建索引。3使用 CREATE (索引修饰符) INDEX 索引名 ON 表名 (表字段) 创建索引。六. 表中如何删除索引1使用 ALTER TABLE ‘表名’ DROP INDEX ‘索引名’ 删除索引。2使用 DROP INDEX ‘索引名’ ON 表名 删除索引。关于数据库的索引下面从什么情况下适合建立索引什么情况下不适合建立索引以及索引失效的几种情况来进行说明。七. 什么情况下适合建立索引1字段的数值有唯一性限制2频繁作为 where 查询条件的字段3经常 GROUP BY 和 ORDER BY的列4UPDATE DELETEWHERE的条件列5DISTINCT 字段需要添加索引6多表join..on..连接操作时首先要注意表的链接最好不要超过三张因为每增加一张表相当于增加了一次嵌套循环表数据之间的笛卡尔积数量会迅速增长严重影响查询效率其次要注意对WHERE条件创建索引WHERE是条件过滤。最后要注意对用于连接的字段创建索引并且该字段在多张表的类型必须一致。7使用列的类型小的创建索引。这里说的类型小指的是该类型表示的数据范围的大小。8使用字符串前缀创建索引。9区分度高散列度高的列适合创建索引。10使用最频繁的列放到联合索引的左侧。11在多个字段都要创建索引时联合索引优于单值索引。八. 什么情况下不适合建立索引1在WHERE 中使用不到的字段不添加索引。2数据量小的表最好不要添加索引。3有大量重复数据的列不要创建索引。4经常更新的表不创建过多索引。5不建议用无序的值创建索引。6删除不再使用或者很少使用的索引。7不要定义冗余或者重复的索引。