MySQL 5种索引应用

文章目录

  • 简介
  • 一、聚集索引
  • 二、唯一索引
  • 三、聚集索引和唯一索引对比
  • 四、非唯一(普通)索引
  • 五、全文索引
  • 六、组合索引
  • 七、索引验证
  • 总结

简介

在本篇文章中,我们将学习MySQL中5种不同类型的索引及其应用场景,以及它们的优缺点。

一、聚集索引

聚集索引是一种在数据库表中物理存储数据行的方式。它的特点是按照索引的顺序存储数据,同时聚集索引也是主键索引。

-- 创建聚集索引的示例
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),age INT
);

应用场景:

  • 经常需要按照特定顺序查询数据的情况下,如按照用户ID排序查询。
  • 需要快速查找最小或最大值的情况下。

优缺点:

  • 优点:提高查询性能,因为数据在物理上相邻存储。
  • 缺点:每次插入、删除或更新数据时,都需要维护聚集索引的顺序,可能会导致性能下降。

二、唯一索引

唯一索引是保证列中的值唯一的一种索引。

-- 创建唯一索引的示例
CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(50) UNIQUE
);

应用场景:

  • 需要保证某一列的值在表中是唯一的情况下,如邮箱地址。
  • 需要快速查找某一特定值的情况下。

优缺点:

  • 优点:保证数据的唯一性,避免重复值。
  • 缺点:插入、删除或更新数据时,需要额外的操作来维护唯一性,可能会影响性能。

三、聚集索引和唯一索引对比

聚集索引和唯一索引是MySQL中两种不同类型的索引,它们在功能和使用场景上有所区别。以下是聚集索引和唯一索引的对比信息:

  • 定义

    • 聚集索引:聚集索引是一种按照索引的顺序物理存储数据行的方式,通常也是主键索引。
    • 唯一索引:唯一索引是一种保证列中的值唯一的索引。
  • 数据唯一性

    • 聚集索引:聚集索引可以是唯一的,也可以是非唯一的,取决于主键或唯一约束。
    • 唯一索引:唯一索引要求列中的值必须唯一,不允许重复值。
  • 索引结构

    • 聚集索引:聚集索引将数据行按照索引的顺序存储在磁盘上。表只能有一个聚集索引,通常由主键定义。
    • 唯一索引:唯一索引使用B-tree或哈希索引等结构来加速查找,在磁盘上并不改变数据行的物理顺序。表可以有多个唯一索引。
  • 查询性能

    • 聚集索引:聚集索引在按照索引顺序查询时具有较高的性能,因为数据行物理上相邻存储。但是,插入、删除或更新数据时需要维护聚集索引的顺序,可能会导致性能下降。
    • 唯一索引:唯一索引可以加速查找具有唯一值的列,提供较好的查询性能。插入、删除或更新数据时需要额外的操作来维护唯一性,可能会影响性能。
  • 适用场景

    • 聚集索引:适用于经常按照特定顺序查询数据或需要快速查找最小或最大值的情况。
    • 唯一索引:适用于需要保证某一列的唯一性和快速查找某一特定值的情况。

四、非唯一(普通)索引

非唯一索引是一种允许列中存在重复值的索引。

-- 创建非唯一索引的示例
CREATE TABLE books (id INT PRIMARY KEY,title VARCHAR(100),author VARCHAR(50),year INT,INDEX idx_author (author)
);

应用场景:

  1. 多列查询:当查询条件中涉及到多个列时,使用组合索引可以减少索引的数量,提高查询效率。
  2. 覆盖索引:如果组合索引包含了查询所需要的所有列,那么查询可以直接使用索引,避免了回表操作,提高性能。
  3. 排序和分组查询:如果查询中有排序或者分组操作,可以考虑将排序或分组的列添加到组合索引中,减少排序和分组操作的开销。

优缺点:
优点:

  1. 减少索引数量:组合索引可以通过将多个列包含在同一个索引中,减少索引的数量,从而减少了存储空间的占用。
  2. 提高查询性能:组合索引可以更好地满足特定的查询需求,减少IO操作和索引扫描的次数,提高查询的速度。
  3. 覆盖索引:组合索引包含了查询所需的所有列,可以直接从索引中获取数据,避免了回表操作,提高查询性能。

缺点:

  1. 索引维护代价:组合索引需要维护多个列的值和顺序,当数据插入、更新或删除时,会增加索引维护的开销。
  2. 冗余索引:组合索引中包含的列顺序很重要,不同的列顺序可能对不同的查询具有不同的性能影响。因此,如果组合索引的列顺序没有完全匹配查询需求,可能会造成索引冗余。

五、全文索引

全文索引是一种用于对文本内容进行全文搜索的索引方式。

-- 创建全文索引的示例
CREATE TABLE articles (id INT PRIMARY KEY,title VARCHAR(100),content TEXT,FULLTEXT INDEX idx_content (content)
);

应用场景:

  • 需要对大段文本进行关键字搜索的情况下,如新闻文章的关键字搜索。
  • 需要根据文本内容的相关性对结果进行排序的情况下。

优缺点:

  • 优点:提供高效的全文搜索功能。
  • 缺点:全文索引占用更多的存储空间。

六、组合索引

组合索引是基于多个列的索引,它可以通过多个列的组合来提高查询效率。

--单独创建
CREATE INDEX index_name ON table_name (column1, column2, ...);

应用场景:

  • 需要快速查找某个确定值的情况下,如按照产品名称查找商品信息。
  • 哈希索引适用于等值查询,但不适用于范围查询。

优缺点:

  • 优点:具有快速查找的特性,适用于等值查询。
  • 缺点:不支持范围查询,同时哈希索引在存储空间上要求较高。

七、索引验证

要验证这些索引是否生效,您可以使用EXPLAIN命令来分析查询语句的执行计划。 EXPLAIN命令提供了关于MySQL如何执行查询的信息,包括使用了哪些索引、表的读取顺序等。

以下是验证索引是否生效的一般步骤:

  1. 打开MySQL客户端,并连接到您的数据库。
  2. 编写一个查询语句,例如:
    EXPLAIN SELECT * FROM table_name WHERE column_name = 'value';
    
    table_name替换为您要查询的表名,column_name替换为您要使用索引的列名,value替换为您要查询的具体值。
  3. 执行EXPLAIN命令,查看结果。
  4. 检查EXPLAIN的输出,特别关注以下几个字段:
    • type: 表示查询的访问类型,例如const表示使用唯一索引,ref表示使用非唯一索引,fulltext表示使用全文索引等。
    • key: 显示实际使用的索引名称。
    • rows: 表示MySQL估计需要扫描的行数。
    • Extra: 包含其他有关查询执行的附加信息,例如是否使用了临时表、排序操作等。
  5. 根据EXPLAIN的输出和上述字段的值来判断索引是否生效。如果type显示了预期的索引类型,并且key字段显示了实际使用的索引名称,则表示索引生效。
    在这里插入图片描述

通过分析EXPLAIN的输出,可以判断查询是否有效使用了索引。如果索引未生效可以进一步检查表定义、索引定义、查询语句等,以确保正确使用了索引。

总结

MySQL的索引对于数据库的性能和效率有非常重要的作用。在使用MySQL索引时,需要注意以下几个方面:

  1. 合适的索引类型:MySQL支持多种类型的索引,如普通索引、唯一索引、主键索引、组合索引和全文索引等。不同的索引类型适用于不同的查询场景,选择合适的索引类型可以减少查询时间和IO操作,提高数据检索速度。

  2. 建立索引的列:建立索引的列应该选择具有高选择性的列,它们的值分布范围应该尽可能地大,这样可以减少索引查找的次数。避免对长文本、二进制或过长的列进行索引,这些类型的列建立索引会降低查询效率。

  3. 索引的顺序:在创建组合索引时,需要考虑列的顺序,不同的顺序可能对查询性能造成很大的影响。通常,将区分度高的列放在组合索引的前面,能保证更快地定位到符合条件的记录。

  4. 索引的数量:过多的索引会增加数据库的维护成本和存储空间,但没有索引会使得查询需要扫描全部表格,效率很低。因此,创建索引的数量应该在适当的范围内,避免过多或过少。

  5. 维护索引:随着数据的插入、更新和删除,索引的维护成为关键问题。频繁的更新操作会使得索引失效,或者出现页分裂等情况,影响性能。对于需要大量更新的表,可以考虑先删除索引,完成更新后再重建索引。

  6. 监控索引:开发者可以使用MySQL自带的工具或者第三方工具来监控索引的使用和效率。通过监控可以了解查询的行为,识别高频查询或低效查询,从而进行相应的优化和调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/115097.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于YOLOv8分割模型实现垃圾识别

基于YOLOv8分割模型实现垃圾识别 本文首发于公众号【DeepDriving】,欢迎关注。 0. 引言 YOLOv8是Ultralytics开源的一个非常火的AI算法,目前支持目标检测、实例分割、姿态估计等任务。如果对YOLOv8的安装和使用还不了解的可以参考我之前写的这篇文章&am…

从C语言到C++_36(智能指针RAII)auto_ptr+unique_ptr+shared_ptr+weak_ptr

目录 1. 智能指针的引入_内存泄漏 1.1 内存泄漏 1.2 如何避免内存泄漏 2. RAII思想 2.1 RAII解决异常安全问题 2.2 智能指针原理 3. auto_ptr 3.1 auto_ptr模拟代码 4. unique_ptr 4.1 unique_ptr模拟代码 5. shared_ptr 5.1 shared_ptr模拟代码 5.2 循环引用 6.…

(笔记六)利用opencv进行图像滤波

(1)自定义卷积核图像滤波 import numpy as np import matplotlib.pyplot as plt import cv2 as cvimg_path r"D:\data\test6-6.png" img cv.imread(img_path)# 图像滤波 ker np.ones((6, 6), np.float32)/36 # 构建滤波器(卷积…

Stable Diffusion中的ControlNet插件

文章目录 ControlNet的介绍及安装ControlNet的介绍ControlNet的安装 ControlNet的功能介绍ControlNet的应用与演示 ControlNet的介绍及安装 ControlNet的介绍 ControlNet 的中文就是控制网,本质上是Stable Diffusion的一个扩展插件,在2023年2月份由斯坦…

supervisorctl(-jar)启动配置设置NACOS不同命名空间

背景 由于需要在上海服务器上面配置B测试环境,原本上面已有A测试环境,固需要将两套权限系统分开 可以使用不同的命名空间来隔离启动服务 注:本文章均不涉及公司机密 1、新建命名空间 命名空间默认会有一个public,并且不能删除&a…

数据结构入门 — 栈

本文属于数据结构专栏文章,适合数据结构入门者学习,涵盖数据结构基础的知识和内容体系,文章在介绍数据结构时会配合上动图演示,方便初学者在学习数据结构时理解和学习,了解数据结构系列专栏点击下方链接。 博客主页&am…

Linux 忘记密码解决方法

很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?答案是不需要进入单用户模式更改一下root密码即可。 步骤如下: 重启linux系统 3 秒之内要按一下回车,出现如下界面 …

VUE笔记(十)Echarts

一、Echarts简介 1、什么是echarts ECharts是一款基个基于 JavaScript 的开源可视化图表库 官网地址:Apache ECharts 国内镜像:ISQQW.COM x ECharts 文档(国内同步镜像) - 配置项 示例:echarts图表集 2、第一个E…

滑动窗口实例4(将x减到0的最小操作数)

题目: 给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 ,返回 …

全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!

全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据! 1.简介 目标:基于pytorch、transformers做中文领域的nlp开箱即用的训练框架,提…

WebGPU加载Wavefront .OBJ模型文件

在开发布料模拟之前,我想使用 WebGPU 开发强大的代码基础。 这就是为什么我想从 Wavefront .OBJ 文件加载器开始渲染 3D 模型。 这样,我们可以快速渲染 3D 模型,并构建一个简单而强大的渲染引擎来完成此任务。 一旦我们有了扎实的基础&#x…

视频文件损坏无法播放如何修复?导致视频文件损坏的原因

如果我们遇到因视频文件损坏而无法正常播放,我们该怎么办?这种情况通常意味着视频文件已经损坏。我们不能访问、编辑或使用它们。那么应该用什么正确的工具和修复程序来修复视频呢? 视频文件损坏的原因 了解视频损坏如何修复之前&#xff0c…

【C51基础实验 LED流水灯】

51单片机项目基础篇 LED流水灯1、硬件电路设计和原理分析2、软件设计2.1、利用循环和移位操作符功能实现:LED流水灯2.2、利用利用封装好的库函数功能实现:LED流水灯 3、编译结果4、结束语 LED流水灯 前言: 前几篇学会了LED驱动原理&#xff…

Mysql001:Mysql概述以及安装

前言:本课程将从头学习Mysql,以我的工作经验来说,sql语句真的太重要的,现在互联网所有的一切都是建立在数据上,因为互联网的兴起,现在的数据日月增多,每年都以翻倍的形式增长,对于数…

数据库CPU飙高问题定位及解决

在业务服务提供能力的时候,常常会遇到CPU飙高的问题,遇到这类问题,大多不是数据库自身问题,都是因为使用不当导致,这里记录下业务服务如何定位数据库CPU飙高问题并给出常见的解决方案。 CPU 使用率飙升根因分析 在分…

概念解析 | 量子时代的灵感:探索量子感知技术

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:量子感知技术。 量子时代的灵感:探索量子感知技术 量子感知技术是一个充满希望和挑战的新兴领域。在此,我们将深入探讨这个主题,概述其背景,解释其工作原理,讨论现有的…

mov怎么改成mp4?跟我一起操作吧

mov怎么改成mp4?mov因为并不是一种常见的视频文件格式,因此大家对这种视频文件可能知道的并不多,但如果你是用的是苹果手机,那么你会发现苹果手机拍摄的视频转移到电脑上后就是mov格式的,因为mov格式的视频并没有受到大…

JDBC使用了哪种设计模式

JDK中提供了操作数据库的接口,比如 java.sql.Driver java.sql.Connection java.sql.Statement java.sql.PreparedStatement 不同的数据库厂商提供操作自己数据库的驱动包, 比如mysql public class Driver extends NonRegisteringDriver implements jav…

一篇文章带你了解-selenium工作原理详解

前言 Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome&#xff0c…

DC电源模块不同的尺寸可以适应实际应用场景

BOSHIDA DC电源模块不同的尺寸可以适应实际应用场景 DC电源模块是现代电子设备的必备部件之一,其可提供稳定的直流电源,保证电子设备正常运行。DC电源模块尺寸的选择直接影响到其适应的应用场景及其性能表现。本文将从尺寸方面分析DC电源模块的适应性&a…