MySQL——索引

目录

[1. 简介](#1. 简介)

2.概念

3.作用

​编辑

4.使用场景

5.索引的使用

[5.1 创建索引](#5.1 创建索引)

[5.2 查看索引](#5.2 查看索引)

[5.3 删除索引](#5.3 删除索引)

6.常见问题


1. 简介

默认情况下,对于任何查询操作,数据库都是从第一条数据一直扫描到最后一条数据,遇到符合条件就会加入到结果集中,数据集越大,查询所花费的时间就越多。对于大数据来说,就需要用户索引来实现。


2.概念

索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引类型,各类索引由各自的数据结构实现。


3.作用

  • 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
  • 索引所起的作用类似书籍目录,可用于快速定位、检索数据。
  • 索引对于提高数据库的性能有很大帮助。


4.使用场景

要考虑对数据库的某列或某几列的创建索引,需要考虑一下几点:

  • 数据量较大,且经常对这些列进行条件查询。
  • 该数据库表的插入操作,及对这些列的修改操作频率较低。
  • 索引会占用额外的磁盘空间。

满足以上条件,考虑对表中的这些字段创建索引,以提高查询效率。

++反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。++


5.索引的使用

5.1 创建索引

在MySQL中,我们可以使用create index语句来创建索引。需要注意的是,只能给表创建索引,而不能给视图创建索引。

语法:

sql 复制代码
create index 索引名
on 表名(列名);

案例:创建班级表中,name字段的索引:

sql 复制代码
create index idx_classes_name on classes(name);

上面案例成功创建了一个名为idx_classes_name 的索引,该索引是针对name这一列来创建的。也就是说当我们对name这一列进行查询时,速度会比没有设置索引时快得多。

5.2 查看索引

使用show index语句来查看索引的基本信息。

语法:

sql 复制代码
show index from 表名;

案例:查看学生表已有的索引:

5.3 删除索引

sql 复制代码
drop index 索引名 on 表名;

案例:删除班级表中name字段的索引:


6.常见问题

  • 主键、外键和唯一键会自动生成索引,且自动生成的索引是不能删除的!!!
  • 过多的索引会降低修改表数据的速度:在修改表数据时,MySQL对自动修改索引列的数据,这样是为了确保索引和表中的数据保持一致,因此,表中建立的索引越多,那么修改表数据的时间就会越长。
  • 过多的索引会增加存储空间:索引会保存具体数据,也就是说,索引需要用额外的硬盘来存储,如果表中建立太多的索引,就会占据大量的存储空间。
  • 如何使用索引?
  1. 数据量较小的表,最好不要建立索引,这是因为对于数据量较小的表来说,建立索引并不能将查询速度提高太多。
  2. 在有较多不同值的字段上建立索引。如果一个字段的值较少且重复值多,比如性别"男","女"字段值只有两个,这类字段上建立索引不仅不会提高查询速度,反而会降低速度。

索引保存的数据结构主要为B+树,及hash的方式,实现原理会在以后的博客会讲解。

相关推荐
考虑考虑3 小时前
数据库中的EXISTS
运维·数据库·后端
Wang's Blog3 小时前
Java框架快速入门: Spring Security+OAuth2之数据库和实体类的RBAC改造
java·数据库·spring
梦想平凡5 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
xcLeigh5 小时前
让大模型长出手脚,自己写SQL查数据库(Function Calling初探)
数据库·人工智能·sql·时序数据库·timechoai
yume_sibai6 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
AugustRed7 小时前
Neo4j 图数据库原理 + 应用场景简单介绍
数据库·neo4j
Gl�ria7 小时前
Redis 高可用架构对比
数据库·redis
IpdataCloud8 小时前
高可用的IP数据接口平台有哪些?从可用性、P99延迟到离线部署的评估框架(含代码)
数据库·tcp/ip·ip
呆萌很8 小时前
MySQL 数据库和表的管理操作(命令行)
数据库·mysql
毕业设计7038 小时前
(免费领源码)基于Python的博物馆研学活动管理系统的设计与实现22724- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·mysql·随机森林·pycharm·django·flask·推荐算法