MySQL索引二三事

本文详细介绍了MySQL索引的概念、优势和缺点,包括如何通过索引加快查询速度、保证数据唯一性以及在多表关联中的作用。同时,讨论了创建索引的策略,如主键、外键、条件字段等,并列举了可能导致索引失效的情况,如LIKE查询、OR条件等。最后,提醒开发者合理创建索引以平衡查询效率和维护成本。
摘要由CSDN通过智能技术生成

面试中经常会被问到mysql索引的问题,所以简单记了几个点

什么是索引

索引是对数据库表中一列或者多列的值进行排序的一种结构;
就类似于书的目录,单独弄几页出来存放目录,通过目录我们可以快速找到指定页。

索引的优势

1、快速访问:通过索引我们可以快速得定位访问到数据库表中的特定数据,可以加
快检索表的速度,提高性能。
2、利用唯一性约束,可以保证数据的某个字段的值及其所在数据行在全表中是唯一
的;
3、作为多表关联查询时的条件,也可以加速表与表之间数据的快速匹配连接;
4、在分组和排序字句进行数据检索,可以减少查询时间中分组和排序时所消耗的时间
(数据库的记录会重新排序)。

索引的缺点

1、增加I/O成本,在创建、维护索引的时候,需要耗费时间,这个时间的成本会随
着数据的增加而增加;
2、占用磁盘,索引就像书本的目录,需要单独开几页来存放,数据越多,索引数据
就越大,自然就要占用更多的硬盘空间;
3、降低效率;这里指的是增、删、改的效率,增删改的时候需要额外去维护索引的
结构,这样自然就增加了数据维护时的时间;所以需要合理建立索引。

索引的创建

索引应该如何创建?一般需要对哪些字段创建索引?
1、主键字段;在主键字段上创建索引,强制该字段的唯一性和组织表中数据的排列
结构;
2、外键字段;经常用在连接(JOIN)的列上,这些列主要是一外键,可以加快连接
的速度;
3、条件范围索引;在经常需要根据范围(> <  >=  <=  IN  BETWEEN)进行搜索
的字段上添加索引,因为索引已经排序,其指定的范围是连续的;
4、排序字段;在经常需要进行排序的字段上添加索引,因为索引已经排序,这样的
查询可以利用索引的排序,加快排序查询的时间;
5、条件字段;在经常会被用来进行where查询的字段上添加索引,加快判断的速度;
6、组合索引;选中多个字段添加索引,在查询时如果查询条件中没有包含最左索引
,那么将不会命中索引;

索引失效

	某些情况下即使我们查询条件中带上了添加了索引的字段,但是查询的时候也不会
用到索引;
1、like语句以%开头,比如 select * from table where name like '%A';以%
开头代表需要查询的字段的前面是模糊的,必须要一个个去找;
2、查询条件中有or;及时or条件中有条件是添加了索引的,也不会使用索引去查询;
除非是or条件的每个条件都创建了索引;
3、如果类型是字符串类型,那么查询是一定要把数据用引号包起来,否则也不会使
用索引;
4、如果mysql判断全表扫描比索引查询要快,那么也不会使用索引;
5、对于复合索引。如果查询条件中没有用到复合索引中最左侧的索引,那么会索引
失效;如果查询条件有跳过索引字段,比如复合索引中有字段(A,B,C)三个字段,查
询时只用到了字段A和字段C,那么也会导致索引失效;这是最佳左索引原则;
6、is null,is not null也会导致索引失效,因为索引是不会存放null值的;

各位Coder如果有自己面试遇到的,里面没有的,可以在下面评论,博主会补充进来的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值