首页 > 数据库 >MySQL索引介绍

MySQL索引介绍

时间:2024-03-24 23:02:00浏览次数:23  
标签:介绍 查询 索引 内存 IO MySQL 磁盘 数据

MySQL索引介绍

01 MySQL的索引是什么?

  • 在关系数据库中,索引是一种单独的、物理的数对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

  • 我们都知道,MySQL需要支持持久化,它把数据存储在磁盘中,使用索引可以减少查询的时间,而不使用索引的查询会更加耗时,因为MySQL需要扫描整个表。

  • 我们知道,单纯的内存运算是很快的,但从磁盘中取数据到内存中是相对慢的,当表中有大量数据时,内存与磁盘交互次数大大增加,这就导致了查询效率低下。(所以将数据存到内存中的Redis数据库查询效率更高)

  • 所以使用索引可以提高查询的性能,同时也可以提高查询的可读性和可维护性。

02 索引提高查询效率的原理

  • 对MySQL数据库的操作相对于cpu和内存操作,磁盘IO(注释1)开销很大,非常容易成为系统的性能瓶颈,所以计算机操作系统做了一些优化(注释2),从而优化了数据访问的性能。

  • 而索引提高查询效率的原理就是减少了查询过程中的IO次数,能够直接指引系统去寻找需要的数据,而不用每次都查找整个数据库。这样可以快速找到符合条件的数据,减少需要读取的数据量。

    • 有了索引,系统可以直接跳到匹配数据位置,而不必对整张表进行扫描,避免了大量的磁盘IO操作。

    • 索引将数据按照规则有序存储,使得查询时可以更有效地顺序读取数据,减少了随机IO操作,提高查询效率。

    • 通过索引,系统能迅速定位到需要的数据页,减少了从磁盘读取数据的次数,减少了磁盘访问,提高了系统性能。

  • (注释1)磁盘IO开销是指计算机系统在进行输入/输出操作时,由于需要读取或写入数据到磁盘而产生的成本和开销。磁盘IO操作是指计算机通过磁盘进行数据的读取和写入,这种操作需要将数据从内存传输到磁盘或者从磁盘传输到内存,涉及到物理设备的读写过程,因此会消耗一定的时间和资源。

  • (注释2)当进行一次IO操作时,系统会将相邻的数据也读取到内存缓冲区中,而不仅仅是当前指定地址的数据。这是因为根据局部预读性原理,当计算机访问某个地址的数据时,与其相邻的数据很可能也会很快被访问到。在这种情况下,系统会将一整页数据(通常为4KB或8KB)一次性读取到内存中,这样实际上只发生了一次IO操作。

03 索引的优点和缺点

  • 索引的优点:

    • 保证数据不重复。
    • 快速查找数据。
    • 帮助连接表之间的数据。
    • 减少查询中的排序和分组时间
  • 索引的缺点:

    • 创建和维护耗时随数据增加。
    • 占用额外磁盘空间。
    • 增删改数据时需要动态更新索引,降低数据维护速度

04 总结

  • 谨慎选择索引字段,避免在重复度高的字段上添加索引。
  • 定期检查和优化索引,确保索引的质量和适用性。
  • 注意避免查询语句导致索引失效,避免不必要的索引,以提高查询效率。
  • 对于增删改频繁的表,需要权衡索引对写入操作的影响,避免过度索引。

标签:介绍,查询,索引,内存,IO,MySQL,磁盘,数据
From: https://blog.csdn.net/2302_77182979/article/details/136997706

相关文章

  • [AIGC] SQL中的数据添加和操作:数据类型介绍
    SQL(结构化查询语言)作为一种强大的数据库查询和操作工具,它能够完成从简单查询到复杂数据操作的各种任务。在这篇文章中,我们主要讨论如何在SQL中添加(插入)数据,以及在数据操作过程中,会产生哪些类型的数据。文章目录如何在SQL中添加数据更新和删除数据更新数据删除数据......
  • std::lock_guard 介绍
    std::lock_gurad是C++11中定义的模板类。定义如下:template <class Mutex>class lock_guard;lock_guard对象通常用于管理某个锁(Lock)对象,因此与MutexRAII相关,方便线程对互斥量上锁,即在某个lock_guard对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而lo......
  • MySQL
    MySQL讲讲mysql的索引为什么要用B+树?B+树为什么更矮胖?有序性:B+树是一种有序的树形结构,可以快速定位和范围查询数据。在B+树中,所有的叶子节点都按照键值的大小顺序连接在一起,这使得范围查询变得高效。同时,有序性也使得B+树在范围查询、排序和分组等操作上更加高效。平衡性:B......
  • 第十篇:MySQL内置函数(字符串函数|数值函数|日期函数|流程函数)
    函数就是一段写好的、具有特定功能的代码,可以被另一段程序直接调用,只要拥有编程基础。想必对函数并不陌生本篇将系统性地记录MySQL中常用的内置函数,主要分为这四大类,字符串函数数值函数日期函数流程函数一,字符串函数(一)concat(S1,S2,...Sn)<-拼接作用描述将传入......
  • Linux 中的以太网管理,以及udhcpc介绍和使用步骤
    在Linux中,udhcpc是一个用于动态获取IP地址的工具,通常用于DHCP(DynamicHostConfigurationProtocol)网络配置。它是BusyBox工具集中的一部分,用于从DHCP服务器获取IP地址、网关、DNS服务器等网络配置信息。以下是udhcpc的基本介绍和使用流程:1.安装udhcpc:udhcpc通常是与BusyBo......
  • designrush网站介绍
    https://www.designrush.com/是一个专注于设计领域的网站。该网站可能提供了设计相关的资讯、作品展示、设计师资源等内容,旨在连接设计师、品牌和创意产业。它可能展示了许多现代感设计的网站案例,为访问者提供了寻找灵感和了解最新设计趋势的平台。这篇文章是DesignRush写的......
  • 【附源码】JAVA计算机毕业设计音乐豆瓣(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展,音乐作为人们日常生活中不可或缺的一部分,其获取与分享方式也在不断地变革。传统的音乐获取途径,如购买唱片或到实体音乐店挑选......
  • docker安装mysql
    1.创建本地文件夹mkdir-p/docker/mysql8/confmkdir-p/docker/mysql8/datamkdir-p/docker/mysql8/log2.新建配置文件在conf文件夹中创建文件:mysql.conf文件内容:[mysqld]init-connect="SETcollation_connection=utf8mb4_0900_ai_ci"init_connect="SETNAMESutf8......
  • linux 下安装mysql redis
    查看是否安装mysql:rpm-qa|grepmysql获取mysql版本:wget-i-chttp://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm安装:rpm-ivhmysql-community-release-el7-5.noarch.rpmyuminstallmysql-community-serversystemctlstartmysqldsystemctlrest......
  • Android系统结构介绍
    1.系统介绍        Android是Google开发的基于Linux平台的、开源的、智能手机操作系统。Android包括操作系统、中间件和应用程序,由于源代码开放,Android可以被移植到不同的硬件平台上。        OHA(OpenHandsetAlliance,开放手机联盟),为Google与33......