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.mzph.cn/news/63705.shtml

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

相关文章

WIFI与BT的PCB布局布线注意事项

1、模块整体布局时,WIFI模组要尽量远离DDR、HDMI、USB、LCD电路以及喇叭等易干扰模块或连接座; 2、晶体电路布局需要优先考虑,布局时应与芯片在同一层并尽量靠近放置以避免打过孔,晶体走线尽可能的短,远离干扰源&…

【MetaAI】2023年MetaAI发布的开源模型和工具

MetaAI开源模型和工具 MetaAILlamaSegment AnythingDINOv2ImageBindMMSLimaVoiceboxMusicGenLlama 2AudioCraftSeamlessM4T MetaAI Meta 首席执行官扎克伯格表示,与其他研究者分享 Meta 公司开发的模型可以帮助该公司促进创新、发现安全漏洞和降低成本。他今年 4 月…

概念解析 | 量子机器学习:将量子力学与人工智能的奇妙融合

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:量子机器学习。 量子机器学习:将量子力学与人工智能的奇妙融合 量子增强机器学习:量子经典混合卷积神经网络 量子机器学习是量子计算和机器学习的结合,它利用量子力学的特…

Opencv-C++笔记 (18) : 轮廓和凸包

文章目录 一、轮廓findContours发现轮廓drawContours绘制轮廓代码 二.几何及特性概括——凸包(Convex Hull)凸包概念凸包扫描算法介绍——Graham扫描算法 相关API介绍程序示例轮廓集合及特性性概括——轮廓周围绘制矩形框和圆形相关理论介绍轮廓周围绘制矩形 -API绘制步骤程序实…

Python数据分析案例30——中国高票房电影分析(爬虫获取数据及分析可视化全流程)

案例背景 最近总看到《消失的她》票房多少多少,《孤注一掷》票房又破了多少多少..... 于是我就想自己爬虫一下获取中国高票房的电影数据,然后分析一下。 数据来源于淘票票:影片总票房排行榜 (maoyan.com) 爬它就行。 代码实现 首先爬虫获…

<AMBA总线篇> AXI总线协议介绍

目录 01 AXI协议简介 AXI协议特性 AXI协议传输特性 02 AXI协议架构 AXI协议架构 write transaction(写传输) read tramsaction(读传输) Interface and interconnect 典型的AXI系统拓扑 03 文章总结 大家好,这里是程序员杰克。一名平平无奇的嵌入式软件工程…

Python 接口测试之Excel表格数据操作方法封装

引言 我们在做接口测试,经常会用到excel去管理测试数据,对Excel的操作比较频繁,那么使用python如何操作Excel文件的读与写呢?由于之前讲的都是大的框框,没有讲这么小的模块使用,现在就化整为0的讲解。 读…

基于OpenCV+LPR模型端对端智能车牌识别——深度学习和目标检测算法应用(含Python+Andriod全部工程源码)+CCPD数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境OpenCV环境Android环境1. 开发软件和开发包2. JDK设置3. NDK设置 模块实现1. 数据预处理2. 模型训练1)训练级联分类器2)训练无分割车牌字符识别模型 3. APP构建1)导入OpenCV库…

数据结构-第一期——数组(Python)

目录 00、前言: 01、一维数组 一维数组的定义和初始化 一维变长数组 一维正向遍历 一维反向遍历 一维数组的区间操作 竞赛小技巧:不用从a[0]开始,从a[1]开始 蓝桥杯真题练习1 读入一维数组 例题一 例题二​ 例题三 实战训…

在iPhone 15发布之前,iPhone在智能手机出货量上占据主导地位,这对安卓来说是个坏消息

可以说这是一记重拳,但似乎没有一个有价值的竞争者能与苹果今年迄今为止的智能手机出货量相媲美。 事实上,根据Omdia智能手机型号市场跟踪机构收集的数据,苹果的iPhone占据了前四名。位居榜首的是iPhone 14 Pro Max,2023年上半年…

详细教程:Stegsolve的下载,jdk的下载、安装以及环境的配置

最近在学习隐写术,下载stegsolve 以及使用stegsolve倒腾了很久,避免朋友们和我一样倒腾了很久,希望此文可以帮到刚在学习隐写的朋友们(win7下使用stegsolve) 文章目录 一、下载stegsolve链接二、jdk的下载三、jdk的安装四、配置环境变量五、检…

Redis——》Pipeline

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

60倍!5G+卫星服务仅中国电信有,中国移动的霸主地位或被撼动

近期国内一家手机企业发布了第三代卫星手机,并且由于再次支持5G而获得高度关注,成为近期手机市场的热点,不过笔者查找了相关资料后却发现,可以支持5G卫星通信服务的仅有中国电信,如此中国移动的霸主地位将可能被撼动。…

Java 大厂八股文面试专题-设计模式 工厂方法模式、策略模式、责任链模式

面试专题-设计模式 前言 在平时的开发中,涉及到设计模式的有两块内容,第一个是我们平时使用的框架(比如spring、mybatis等),第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#xff…

15-mongodb

一、 MongoDB 简介 1 什么是 MongoDB MongoDB 是一个基于分布式文件存储的数据库。由 C语言编写。在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系…

【力扣每日一题】2023.9.1 买钢笔和铅笔的方案数

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们三个数,一个是我们拥有的钱,一个是钢笔的价格,另一个是铅笔的价格。 问我们一共有几种买笔…

【广州华锐互动】VR全景工厂虚拟导览,虚拟现实技术提升企业数字化信息管理水平

随着工业4.0的到来,VR工厂全景制作成为了越来越多工业企业的选择。传统的工厂管理方式往往存在诸多问题,如信息不对称、安全隐患等。为了解决这些问题,VR工厂全景制作应运而生,它通过结合虚拟现实现实技术和数据采集技术&#xff…

【React学习】—React中的事件绑定(八)

【React学习】—React中的事件绑定&#xff08;八&#xff09; 一、原生JS <body><button id"btn1">按钮1</button><button id"btn2">按钮2</button><button onclick"demo()">按钮3</button><scr…

Java设计模式-状态模式

1.概述 定义&#xff1a; 对有状态的对象&#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 【例】通过按钮来控制一个电梯的状态&#xff0c;一个电梯有开门状态&#xff0c;关门状态&#xff0c;停止状…

ubuntu tensorrt 安装

官网&#xff0c;非常详细&#xff0c;比大部分博客写的都好&#xff0c;强烈推荐 具体的点进链接