数据库的索引

目录

1. 什么是索引?

2. 索引的优点?

3. 索引的缺点?

4. 索引的分类?

5. 表中添加索引的三种方式?

 6. 表中如何删除索引?

7. 什么情况下适合建立索引?

8. 什么情况下不适合建立索引?


提前声明,本帖内容主要是用来背诵记忆的,没有深入底层讲解索引的原理,是为面试而总结的一些知识点,如果各位想深入了解索引的底层原理B+树,可以看我的另一篇文章,里面说的非常详细。

深入理解索引B+树的基本原理_程序猿ZhangSir的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_70325779/article/details/132182698?spm=1001.2014.3001.5501

1. 什么是索引?

MySQL 官方对索引的定义是:索引(index)是帮助 MySQL 高效获取数据的数据结构。

由此不难看出,索引的本质是数据结构。可以简单理解为“排好序的快速查找数据结构”,满足特定的查找算法,这些索引结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法。另外,索引是在存贮引擎中实现的,因此不同存储引擎中索引的实现原理不一定完全相同。

2. 索引的优点?

(1)提高数据的检索效率,降低数据库的IO成本,这也是创建索引最主要的原因。

(2)通过创建唯一索引,可以保证表中每一行数据的唯一性。

(3)在实现数据的参考完整性方面,可以加速表与表之间的连接。换句话说就是,对于有依赖关系的子表和父表联合查询时,可以提高查询速度。

(4)在使用分组和排序进行查询时,可以显著减少查询中分组和排序的时间,降低CPU的消耗。

3. 索引的缺点?

(1)创建索引和维护索引需要耗费时间,并且随着数据量的增加,耗费时间也会增加。

(2)索引需要占用磁盘空间,除了数据库中表占用的磁盘空间之外,每一个索引也会占用一定的物理空间,存贮在磁盘上,如果有大量的索引,可能索引文件比数据库文件更快达到最大文件尺寸。

(3)虽然索引大大提高了表的查询效率,但同时也降低了更新表的速度。当对表中的数据进行增删改时,索引也需要动态地维护,这样就降低了数据的维护速度。

4. 索引的分类?

MySql索引包括普通索引,唯一性索引,全文索引,单列索引,多列索引和空间索引。

(1)从功能逻辑上分:主要分为四种,普通索引,唯一索引,主键索引,全文索引。

(2)从物理实现上分:分为聚簇索引和非聚簇索引。

(3)从作用字段划分:分为单列索引和联合索引。 

5. 表中添加索引的三种方式?

(1)创建表的时候就创建索引。

(2)使用 ALTER TABLE ‘表名’ ADD (索引修饰符) INDEX ‘索引名’ (‘表字段’ ) 创建索引。

(3)使用 CREATE (索引修饰符) INDEX '索引名' ON 表名 (表字段) 创建索引。

 6. 表中如何删除索引?

(1)使用 ALTER TABLE  ‘表名’ DROP INDEX ‘索引名’  删除索引。   

(2)使用 DROP INDEX ‘索引名’ ON 表名  删除索引。   

关于数据库的索引,下面从什么情况下适合建立索引,什么情况下不适合建立索引以及索引失效的几种情况来进行说明。

7. 什么情况下适合建立索引?

(1)字段的数值有唯一性限制;

(2)频繁作为 where 查询条件的字段;

(3)经常 GROUP BY 和 ORDER BY的列;

(4)UPDATE ,DELETE,WHERE的条件列;

(5)DISTINCT 字段需要添加索引;

(6)多表join..on..连接操作时;首先要注意,表的链接最好不要超过三张,因为每增加一张表相当于增加了一次嵌套循环,表数据之间的笛卡尔积数量会迅速增长,严重影响查询效率;

其次要注意,对WHERE条件创建索引,WHERE是条件过滤。

最后要注意,对用于连接的字段创建索引,并且该字段在多张表的类型必须一致。

(7)使用列的类型小的创建索引。这里说的类型小指的是该类型表示的数据范围的大小。

(8)使用字符串前缀创建索引。

(9)区分度高(散列度高)的列适合创建索引。  

(10)使用最频繁的列放到联合索引的左侧。

(11)在多个字段都要创建索引时,联合索引优于单值索引。

8. 什么情况下不适合建立索引?

(1)在WHERE 中使用不到的字段,不添加索引。

(2)数据量小的表最好不要添加索引。

(3)有大量重复数据的列不要创建索引。

(4)经常更新的表不创建过多索引。

(5)不建议用无序的值创建索引。

(6)删除不再使用或者很少使用的索引。

(7)不要定义冗余或者重复的索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值