了解Mysql索引

前言

在大多数数据库应用程序中,数据的快速检索和高效查询是至关重要的。MySQL 索引作为一种关键技术,为我们提供了优化查询性能的重要手段。通过合理地设计和使用索引,我们可以显著提高数据库的查询效率,加速数据的检索、排序、分组和连接等操作,从而满足用户对快速响应和高性能的需求。本文将介绍 MySQL 索引的基本概念、原理和常见用法,帮助读者更好地理解和利用索引来优化数据库应用程序的性能。

一、 MySQL 索引的基本概念

1、什么是索引?

索引是对数据库表的一列或者多列的值进行排序一种结构,使用索引可以快速访问数据表中的特定信息。

2、有什么优缺点?

优点:

  • 提高检索速度: 索引可以大大提高数据的检索速度。通过创建索引,MySQL 可以直接定位到数据行,而不是逐行扫描整个表,从而加快查询速度。
  • 加速数据的排序和分组: 如果查询中包含了排序或者分组操作,索引可以减少 MySQL 需要处理的数据量,从而提高排序和分组的效率。
  • 加速表连接: 如果查询中涉及到多个表的连接操作,索引可以加快表之间的关联速度,提高查询效率。
  • 提高数据的唯一性和完整性: 通过在列上创建唯一索引或者主键索引,可以确保表中的数据是唯一的,从而提高数据的完整性。
  • 减少磁盘 I/O: 索引可以减少 MySQL 需要读取的磁盘数据量,从而减少磁盘 I/O,提高系统性能。

缺点:

  • 从空间角度考虑,建立索引需要占用物理空间
  • 从时间角度 考虑,创建和维护索引都需要花费时间,例如对数据进行增删改的时候都需要维护索引

二、 MySQL B+树索引

1.B+树索引数据结构

在这里插入图片描述
B+树具有有序性,并且所有的数据都存放在叶子节点,叶子节点是通过相连在一起的,所以查找的效率非常高,并且支持排序和范围查找。INnoDB存储引擎默认的索引,支持排序、分组、范围查询、模糊查询等,并且性能稳定。

2.MySQL索引使用B+树而不是B树?

B树中的内部节点和叶子节点均存放键和值
在这里插入图片描述

  • B树适用于随机检索,而B+树适用于随机检索和顺序检索。
  • B+树的空间利用率更高,因为B树每个节点要存储键和值,而B+树的内部节点只存储键,这样B+树的一个节点就可以存储更多的索引,从而使树的高度变低,减少了I/O次数,使得数据检索速度更快。
  • B+树的叶子节点都是连接在一起的,所以范围查找,顺序查找更加方便。
  • B+树的性能更加稳定,因为在B+树中,每次查询都是从根节点到叶子节点,而在B树中,要查询的值可能不在叶子节点,在内部节点就已经找到。
    那在什么情况适合使用B树呢,因为B树的内部节点也可以存储值,所以可以把一些频繁访问的值放在距离根节点比较近的地方,这样就可以提高查询效率。综上所述,B+树的性能更加适合作为数据库的索引。

三、 MySQL 索引常见用法

1、 索引使用情况:

  1. 适合索引的列是在where后面出现的列或者连接句子中指定的列。
  2. 每个索引都需要额外的物理空间,维护也需要花费时间,所以索引不是越多越好。

2、 索引使用场景:

1.一般不会出现在where条件中的字段就没有必要建立索引了。
2.对于中大型表建立索引非常有效,对于非常小的表,一般全部表扫描速度更快些。
3.若表的增删改非常多,而查询需求非常少,就没必要建立索引了,因为维护索引也是需要代价的。

3、 如何创建/删除索引?

1.创建索引:

(1):使用CREATE INDEX 语句

CREATE INDEX index_name ON table_name (column_list);

(2):在CREATE TABLE时创建

CREATE TABLE user(
	id INT PRIMARY KEY,
	username varchar(50),
	FULLTEXT KEY (username)
);

(3):使用ALTER TABLE 创建索引

ALTER TABLE table_name ADD INDEX index_name (column_list);

2.删除索引:

删除主键索引
(1):alter table table_name drop primary key
删除其他索引
(2):alter table table_name drop key index_name

四、 总结

MySQL索引提高数据库性能,加速查询、排序和连接。它基于B+树结构,支持高效的检索和范围查找。索引应用需适度,优化查询字段,避免频繁增删操作。创建索引可通过CREATE INDEX或ALTER TABLE,删除则用DROP INDEX。索引是数据库优化的利器,但需注意空间占用和维护成本。

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值